-
java 存储 blob_java对blob的存取
2021-02-12 16:31:47此实现为用java访问mysql的blob,对图片进行存取/*** Title: BlobPros.java* Project: test* Description: 把图片存入mysql中的blob字段,并取出* Call Module: mtools数据库中的tmp表* File: C:downloadsluozsh.jpg*...此实现为用java访问mysql的blob,对图片进行存取
/**
* Title: BlobPros.java
* Project: test
* Description: 把图片存入mysql中的blob字段,并取出
* Call Module: mtools数据库中的tmp表
* File: C:downloadsluozsh.jpg
* Copyright: Copyright (c) 2003-2003
* Company: uniware
* Create Date: 2002.12.5
* @Author: ChenQH
* @version 1.0 版本*
*
* Revision history
* Name Date Description
* ---- ---- -----------
* Chenqh 2003.12.5 对图片进行存取
*
* note: 要把数据库中的Blob字段设为longblob
*
*/
//package com.uniware;
import java.io.*;
import java.util.*;
import java.sql.*;
public class BlobPros
{
private static final String URL = "jdbc:mysql://10.144.123.63:3306/mtools?user=wind&password=123&useUnicode=true";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;
public BlobPros()
{
}
/**
* 向数据库中插入一个新的BLOB对象(图片)
* @param infile 要输入的数据文件
* @throws java.lang.Exception
*/
public void blobInsert(String infile) throws Exception
{
FileInputStream fis = null;
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
file = new File(infile);
fis = new FileInputStream(file);
//InputStream fis = new FileInputStream(infile);
pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");
pstmt.setString(1,file.getName()); //把传过来的第一个参数设为文件名
//pstmt.setBinaryStream(2,fis,(int)file.length()); //这种方法原理上会丢数据,因为file.length()返回的是long型
pstmt.setBinaryStream(2,fis,fis.available()); //第二个参数为文件的内容
pstmt.executeUpdate();
}
catch(Exception ex)
{
System.out.println("[blobInsert error : ]" + ex.toString());
}
finally
{
//关闭所打开的对像//
pstmt.close();
fis.close();
conn.close();
}
}
/**
* 从数据库中读出BLOB对象
* @param outfile 输出的数据文件
* @param picID 要取的图片在数据库中的ID
* @throws java.lang.Exception
*/
public void blobRead(String outfile,int picID) throws Exception
{
FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
pstmt = conn.prepareStatement("select pic from tmp where id=?");
pstmt.setInt(1,picID); //传入要取的图片的ID
rs = pstmt.executeQuery();
rs.next();
file = new File(outfile);
if(!file.exists())
{
file.createNewFile(); //如果文件不存在,则创建
}
fos = new FileOutputStream(file);
is = rs.getBinaryStream("pic");
int size = 0;
/* while(size != -1)
{
size = is.read(Buffer); //从数据库中一段一段的读出数据
//System.out.println(size);
if(size != -1) //-1表示读到了文件末
fos.write(Buffer,0,size);
} */
while((size = is.read(Buffer)) != -1)
{
//System.out.println(size);
fos.write(Buffer,0,size);
}
}
catch(Exception e)
{
System.out.println("[OutPutFile error : ]" + e.getMessage());
}
finally
{
//关闭用到的资源
fos.close();
rs.close();
pstmt.close();
conn.close();
}
}
public static void main(String[] args)
{
try
{
BlobPros blob = new BlobPros();
//blob.blobInsert("C:Downloadsluozsh1.jpg");
blob.blobRead("c:/downloads/1.jpg",47);
}
catch(Exception e)
{
System.out.println("[Main func error: ]" + e.getMessage());
}
}
}
-
java 存储过程 blob_使用存储过程(PL/SQL)向数据库中存储BLOB对象
2021-03-09 15:20:11使用存储过程(PL/SQL)向数据库中存储BLOB对象Using Create directory & UTL_FILE in OracleC:\>sqlplus "/ as sysdba"SQL*Plus: Release 10.1.0.3.0 - Production on Tue Apr 26 07:11:51 2005Copyright (c) ...使用存储过程(PL/SQL)向数据库中存储BLOB对象
Using Create directory & UTL_FILE in Oracle
C:\>sqlplus "/ as sysdba"
SQL*Plus: Release 10.1.0.3.0 - Production on Tue Apr 26 07:11:51 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining options
SQL> create user eygle identified by eygle default tablespace users;
User created.
SQL> grant connect ,resource,dba to eygle;
Grant succeeded.
SQL> connect / as sysdba
Connected.
SQL> create or replace directory BLOBDIR as 'D:\oradata\Pic';
Directory created.
SQL> grant read on directory BLOBDIR to eygle;
Grant succeeded.
SQL>
2.创建测试表
SQL> connect eygle/eygle
Connected.
SQL> CREATE TABLE eygle_blob (
2 fid number,
3 fname varchar2(50),
4 fdesc varchar2(200),
5 fpic BLOB)
6 /
Table created.
SQL>
SQL> create sequence S_EYGLE_SEQ
2 start with 1
3 increment by 1
4 /
Sequence created.
SQL>
3.创建存储过程
SQL> CREATE OR REPLACE PROCEDURE eygle_load_blob (pfname VARCHAR2,pdesc varchar2)
2 IS
3 src_file BFILE;
4 dst_file BLOB;
5 lgh_file BINARY_INTEGER;
6 BEGIN
7 src_file := bfilename('BLOBDIR', pfname);
8
9 INSERT INTO eygle_blob (fid,fname,fdesc,fpic)
10 VALUES (S_EYGLE_SEQ.Nextval,pfname,pdesc,EMPTY_BLOB())
11 RETURNING fpic INTO dst_file;
12
13 SELECT fpic INTO dst_file
14 FROM eygle_blob WHERE fname = pfname FOR UPDATE;
15
16 dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
17 lgh_file := dbms_lob.getlength(src_file);
18 dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
19
20 UPDATE eygle_blob SET fpic = dst_file
21 WHERE fname = pfname;
22
23 dbms_lob.fileclose(src_file);
24 commit;
25 END eygle_load_blob;
26 /
Procedure created.
SQL> col segment_name for a30
SQL> select segment_name,segment_type,bytes/1024/1024 from dba_segments where owner='EYGLE';
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
------------------------------ ------------------ ---------------
SYS_IL0000050545C00004$$ LOBINDEX .0625
SYS_LOB0000050545C00004$$ LOBSEGMENT .0625
EYGLE_BLOB TABLE .0625
4.加载Blob对象
SQL> exec eygle_load_blob('ShaoLin.jpg','少林寺-康熙手书');
PL/SQL procedure successfully completed.
SQL> select segment_name,segment_type,bytes/1024/1024 from dba_segments where owner='EYGLE';
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
------------------------------ ------------------ ---------------
SYS_IL0000050545C00004$$ LOBINDEX .0625
SYS_LOB0000050545C00004$$ LOBSEGMENT 4
EYGLE_BLOB TABLE .0625
SQL> exec eygle_load_blob('DaoYing.jpg','倒映');
PL/SQL procedure successfully completed.
SQL> select segment_name,segment_type,bytes/1024/1024 from dba_segments where owner='EYGLE';
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
------------------------------ ------------------ ---------------
SYS_IL0000050545C00004$$ LOBINDEX .0625
SYS_LOB0000050545C00004$$ LOBSEGMENT 7
EYGLE_BLOB TABLE .0625
SQL> col fname for a20
SQL> col fdesc for a30
SQL> select fid,fname,fdesc,dbms_lob.getlength(fpic) siz from eygle_blob;
FID FNAME FDESC SIZ
---------- -------------------- ------------------------------ ----------
1 ShaoLin.jpg 少林寺-康熙手书 1768198
2 DaoYing.jpg 倒映 2131553
D:\oradata\Pic>ls -l
-rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg
通过以上方式,我们可以很容易的把大对象存储到数据库中。
历史上的今天...
>>
2009-04-28文章:
2008-04-28文章:
2006-04-28文章:
By eygle on 2005-04-28 10:12 |
Comments (11) |
SQL.PLSQL | 274 |
11 Comments
eygle :
能再进一步,把本地xml文件,导入到数据库中(ver>9i).
RETURNING fpic INTO dst_file;
SELECT fpic INTO dst_file
FROM eygle_blob WHERE fname = pfname FOR UPDATE;
是否有些重复?如果没有,为什么?对于Blob类型的处理必须这样吗?
如何使用存储过程(入参是blob类型)java客户端调用存储过程将客户端的文件保存到数据库中呢?
http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/lob/LobToSP.html
这是个关于clob的例子
老大,怎么更新这个blob字段呢?
单表上传的例子,我已经搞定了。
能否把把表和字段也做成参数传递进过程?
我这里有多个表具有BLOB字段,想通过一个过程来实现上传文件。不知道行不行!
D:\oradata\Pic>ls -l
ls不是unix下的命令吗?D:\oradata\Pic>看上去像windows啊?
Windows上也是可以安装类Unix软件包,来获得这些命令增强。
大侠 你好
我按你的步骤怎么出现错误呢:
--建立目录:
create or replace directory BLOB_DIR as 'F:\oradata';
--创建存储过程
CREATE OR REPLACE PROCEDURE microle_load_blob (pfname VARCHAR2,pdesc varchar2)
IS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := bfilename('BLOB_DIR', pfname);
INSERT INTO microle_blob(fid,fname,fdesc,fpic)
VALUES (S_MICROLE_SEQ.Nextval,pfname,pdesc,EMPTY_BLOB())
RETURNING fpic INTO dst_file;
SELECT fpic INTO dst_file
FROM microle_blob
WHERE fname = pfname
FOR UPDATE;
dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
lgh_file := dbms_lob.getlength(src_file);
dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
UPDATE microle_blob SET fpic = dst_file
WHERE fname = pfname;
dbms_lob.fileclose(src_file);
commit;
END microle_load_blob;
--调用
exec microle_load_blob('P5140116.JPG','CS');
--出现错误如下
ORA-22288: 文件或 LOB 操作FILEOPEN失败
设备未就绪。
这个方法应该适用于BLOB,CLOB这两种类型。
对于Long,Long Raw,Raw可能需要考虑采用别的途径来进行解决 。
这个方法应该适用于BLOB,CLOB这两种类型。
对于Long,Long Raw,Raw可能需要考虑采用别的途径来进行解决 。
-
java mysql blob 存储图片_java以Blob形式存储,读取图片并在jsp页面显示图片流
2021-02-03 06:06:24封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。package org.blog.util;import java.io.File;import java.io.FileInputStream;import java.io....封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。
package org.blog.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ImageUtil {
private static File file = null;
/**
* 读取图像的二进制流
*
* @param infile
* @return
*/
public static FileInputStream getByteImage(String infile) {
FileInputStream inputImage = null;
file = new File(infile);
try {
inputImage = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return inputImage;
}
/**
* 输出图片
* @param inputStream
* @param path
*/
public static void readBlob(FileInputStream inputStream, String path) {
try {
FileOutputStream fileOutputStream = new FileOutputStream(path);
byte[] buf = new byte[1024];
int len = 0;
while ((len = inputStream.read(buf)) != -1) {
fileOutputStream.write(buf, 0, len);// 写
}
inputStream.close();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
从数据库中读出二进制流显示到jsp页面:
servlet源码:
package servlet;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Blob;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.blog.util.ImageUtil;
import org.hibernate.Hibernate;
public class Image extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
FileInputStream in = ImageUtil.getByteImage("D:\\me.jpg");
Blob blob = Hibernate.createBlob(in);
InputStream inputStream = blob.getBinaryStream();// IO流
int length = (int) blob.length();
byte[] b = new byte[length];
inputStream.read(b, 0, length);
PrintWriter out = resp.getWriter();
InputStream is = new ByteArrayInputStream(b);
int a = is.read();
while (a != -1) {
out.print((char) a);
a = is.read();
}
out.flush();
out.close();
/*OutputStream outputStream = resp.getOutputStream();// 从response中获取getOutputStream
outputStream.write(b);// 写
inputStream.close();
outputStream.close();*/
} catch (Exception e) {
System.out.println("error");
}
}
}
jsp源码:
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'image.jsp' starting pagejsp从数据库中读取二进制图片显示在页面上,要求图片在规定的长宽中显示,大的缩写,小的还是原图大小代码
200)this.width=200;if(this.height>80)this.height=80" src='GetPhoServlet.do?objectFlag=2&photo_no=' />
-
java mysql blob 存储图片_Java操作mysql存储图片
2021-02-06 21:12:23mysql中有可以存储很大的2进制流...用的类型是:我们要做的是将一张图片存入Mysql中,在Mysql中用Blob来存储图片和音频等大的数据项.Blob 按其容量可分为四种,分别为:tinyblob,blob ,mediumblob,longblob.他们的大小...http://bbs.chinaunix.net/archiver/tid-2289421.html
1把图片当成一个二进制流就可以了
。mysql中有可以存储很大的2进制流文件。用的类型是:
我们要做的是将一张图片存入Mysql中,在Mysql中用Blob
来存储图片和音频等大的数据项.Blob 按其容量可分为四种,分别为:tinyblob,blob ,mediumblob,
longblob.他们的大小分别为:256B,64KB,16MB,4GB.除了容量不同外,这四种的用法一个样
2 将一个图片文件输入到mysql
:
FileInputStream fin = new FileInputStream(image);//生成的流
PreparedStatement ps = con.prepareStatement("insert into id_image values(?, ?)");//
ps.setInt(1, i);
ps.setBinaryStream(2, fin, len);
ps.executeUpdate();
插入就完成了。。
3 将一个图片读出来
,以流的形式存放。
Statement stm = conn.createStatement();
String sql = "select * from id_image where id = "
+ new Integer(id).toString();
ResultSet rs = stm.executeQuery(sql);
Blob blob = (Blob)rs.getBlob("image");
InputStream is = blob.getBinaryStream();
然后就可以利用is进行想要的操作了。
先用Blob格式存储,然后变为
分享到:
2011-04-26 11:23
浏览 871
评论
-
java 存储过程 blob_Java调用带有输入参数为Blob类型的存储过程
2021-03-04 08:40:261.创建表和存储过程的SQL语句createtabletestblob(int_colinteger,blob_colblob)createPROCEDUREspp(ININT_PINTEGER,INOUTBLOB_PBLOB)P1:BEGININSERTINTOtestblob(INT_COL,BLOB_COL)values(INT_P,BLOB_P... -
java clob blob_Java操作BLOB和CLOB
2021-02-27 15:15:43可存储的最大大小为4G字节,通常像图片、文件、音乐等信息就用BLOB字段来存储。CLOBCLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不... -
java object blob_Java对象以Blob存储,及序列化反序列化 (2) | 学步园
2021-03-06 19:49:00在上一节讲述了如何根据JAVA实体类的大小,选择对应的blob格式,现在我们将以一个简单的例子完整的讲述如何将Java对象一Blob格式存储数据库。修改TUser.javapackage cn.vicky.po;import cn.vicky.po.vo.User;import ... -
java azure blob 查询_快速入门:适用于 Java 的 Azure Blob 存储客户端库 v8 | Microsoft Docs...
2021-03-11 14:18:58您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.快速入门:使用 Java v8 SDK 管理 ...Java 管理 blob。In th... -
java中Blob字段出库/获取Blob字段存储的数据
2017-06-02 15:28:40这次说一下Blob字段的出库,也就是读取Blob字段中存的数据,因为不知道Blob字段中存的数据(文件)时什么类型的,所以可以在存入数据库的时候,每一条数据对应的存上Blob中存入的文件的文件名(一定带上文件格式),... -
Java接受blob类型图片_利用blob类型存储图片
2021-03-17 22:46:13SavePicture.java :public class SavePicture {public static void main(String[] args) {Connection conn=null;PreparedStatement pstmt=null;String sql="insert into student(id,name,photo) values(?,?,?)";tr..... -
java azure blob 查询_使用jQuery从Azure Blob存储中查询JSON数据
2021-03-11 14:18:49好吧,显然Azure blob存储不能直接支持JSONP,但可以做到.例如,如果我将此JSON存储在Azure blob中:{"Name":"Valeriano","Surname":"Tortola"}我尝试:$.getJSON(... -
java blob存储_快速入门:Azure Blob 存储库 v12 - Java | Microsoft Docs
2021-03-06 05:49:53您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.快速入门:使用 Java v12 SDK 管理 ...Java 管理 blob。In ... -
JAVA 操作BLOB
2019-09-10 11:46:36其中blob适用于非文本数据,图片、视频、pdf文件、MP3文件等等,BLOB是二进制大对象,按字节存储。 clob适用于处理大文本数据,CLOB是字符型大对象,按字符进行存储。 package com.Aes; import java.io.*; ... -
java实现 BLOB图片大文件在oracle中的存储和查找
2012-03-19 22:48:35java实现 BLOB图片大文件在oracle中的存储和查找,采用MVC模型编写,很适合初学着对JDBC的学习,对熟悉java与oracle的连接很有帮助. -
Java 对象存储到Oracle Blob字段
2021-01-21 17:11:08java对象存储到Blob ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo; try { oo = new ObjectOutputStream(bo); oo.writeO -
java 操作blob_JAVA 操作Oracle 数据库Blob 字段
2021-03-21 09:34:20因为今天需要测试插入Oracle ...总体思路:插入:因为Oracle BLOB字段存储的数据是二进制的数据。所以我先把图片转换成二进制数据用byte[]数组来存储进行插入。导出:把BLOB字段的二进制数据查询出来,再写入图... -
java blob读写_Oracle知识点(一)—Java读写Blob
2021-02-27 18:08:531 测试表create table blob_demo(id VARCHAR2(50),image blob,content blob)2 新增一条表数据2.1 目的插入一条记录,其中image列存储图片,contet存储正常的文本。2.2 核心代码/*** 新增一条数据* @param conn*/... -
java azure blob 查询_使用 blob 索引标记来管理和查找 Azure Blob 存储上的数据 | Microsoft Docs...
2021-03-11 14:18:18在 Azure 门户中,"blob 索引标记" 筛选器会自动应用 @container 参数以限定所选容器的范围。Within the Azure portal, the blob index tags filter automatically applies the @container ... 如果要跨整个存储帐户... -
mybatis 存储blob数据
2016-11-08 11:36:18mybatis 存储blob数据 存储blob数据的主要过程: 1、读取文件(本地或者前台传给后台)。 2、文件转换成byte[]。 3、存储到数据库中。 下面是一个例子程序,采用的是springmvc,spring,mybatis框架: customer.... -
Java hibernate blob图片读取
2019-09-18 09:49:57开始我并不知道之前的Coder的怎么存储的图片,我也看不到代码。 查看数据库图片存成了Blob类型,最后...{首先我在度娘上搜:“java hibernate blob读取”之类的,最后用的例子都是查询一个ResultSet结果集回来,... -
blob转base64 db2 java_Java中blob转base64编码
2021-03-08 22:35:42项目中使用blob字段存储图片,,在页面上展示时,需要进行转化,此处做个笔记:public static String convertBlobToBase64String(Blob blob) { String result = ""; if(null != blob) { try { InputStream ... -
存储blob字段
2015-02-17 13:44:25Blob字段存储在JDBC4.0之前和之后有区别,具体区别看代码。 import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.sql.Blob; import java.sql.... -
JAVA blob存储file对象_在数据库中保存MultipartFile / blob问题
2021-03-13 13:42:24嗨我想上传图像并将其存储在数据库中我使用spring mvc&hibernate这是模型import java.sql.Blob;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence... -
java怎们存blob_Java如何将BLOB数据存储到数据库中?
2021-03-18 10:06:54数据库BLOB(二进制大对象)可用于存储任何数据,例如可以是图像,音频或视频文件。本示例说明如何使用JDBC库将图像存储在数据库中。要将二进制信息发送到数据库,我们可以调用该PreparedStatement.setBinaryStream()... -
java中Blob数据存入数据库
2017-06-01 15:37:49BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们... -
Java JDBC Blob 批量插入
2020-12-26 23:34:43(1)MySQL中, BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。 (2)插入BLOB类型的数据必须使用PreparedStatement ,因为BLOB类型的数据无法使用字符串拼接写的。 (3)MySQL的... -
Java操作BLOB和CLOB
2021-02-07 21:20:26可存储的最大大小为4G字节,通常像图片、文件、音乐等信息就用BLOB字段来存储。 CLOB CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块...