你把一下的代码加入到一个类里就可以了,我已经测试过了,由于字数的限制不能把完整的类发上来。
String PSQL = "insert into TESTBLOB(NUMCONTENTID,BLOBCONTENT) " + "values(,EMPTY_BLOB())";
String SSQL = "select BLOBCONTENT from TESTBLOB where NUMCONTENTID = for update";
String USQL = "update TESTBLOB set BLOBCONTENT = where NUMCONTENTID = ";
public WriteBLOB() throws Exception {
Connection conn = null;
try {
conn = getConnection();
connsetAutoCommit(false);
ByteBuffer bb = ByteBufferallocate(10836);
bbposition(0);
bbputInt(1);
//调用 insertBLOB 方法 的contentid 应该使用序列这里为了简单就直接写死了
//下面的插入方式应该是你想要的方法 在数据库中会看到 0000 0001 0000 0000 0000
//但是你这里好像没有真正的是用 ByteBuffer
byte [] b1 = bbarray();
insertBLOB(conn, 1, b1);
//下面是使用 ByteBuffer 后的插入 在数据库中会看到 0000 0001
//不知道你想要什么样子的,你自己选择不吧
bbflip();
byte [] b2 = new byte [bbremaining()];
bbget(b2);
insertBLOB(conn, 2, b2);
} catch (Exception ex) {
exprintStackTrace();
connrollback();
} finally {
if (conn != null)
connclose();
}
}
public void insertBLOB(Connection conn, int contentid, byte[] content)
throws Exception {
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
int id = contentid;
try {
pstmt = connprepareStatement(PSQL);
pstmt2 = connprepareStatement(USQL);
pstmtsetInt(1, id);
try {
pstmtexecuteUpdate();//在数据库中插入空对象
} catch (SQLException ex) {
exprintStackTrace();
}
pstmt = connprepareStatement(SSQL);
pstmtsetInt(1, id);
ResultSet rs = pstmtexecuteQuery();//查询新插入的记录
oraclesqlBLOB pc = null;
while (rsnext()) {
pc = (oraclesqlBLOB) rsgetBlob(1);
}
byte[] data = content;
pcputBytes(1, data);
pstmt2setBlob(1, pc);
pstmt2setInt(2, id);
pstmt2executeUpdate();
} finally {
try {
pstmtclose();
pstmt2close();
} catch (Exception EE) {
}
}
return;
}
我大概明白了,估计是这个意思,就是客户给你一个URL,这个URL指定一个资源,有可能是或者视频,需要把这个资源以BLOB的方式存进数据库里面。
其实这应该是两个步骤,先或者这个资源的>
例:假设给oracle数据库导入blob类型的,放在目录G:\images下。 1先创建一个目录directory,命名为IMAGES; CREATE OR REPLACE DIRE,TORY IMAGES AS 'G:\test';或者直接在PlSql Directories目录下新建目录; 2创建一个存储过程,批量导入blob create or replace procedure img_insert asbeginDECLARE f_lob bfile;--文件类型b_lobblob; --用来存储的名称filenamevarchar2(400);begin --循环的初始值for i in 1 100 loop --找出每一列的文件名,因为文件名和名称是一样的 select tflnm into filename from ZS_GC_SNIMDT t where tid =i; --查找到之后,执行update *** 作,插入空的blob (注意IMAGES一定要大写) update ZS_GC_SNIMDT set brfl = empty_blob()whereid = i return brfl into b_lob; --获取指定目录下的文件 f_lob := bfilename('IMAGES', filename); -- 以只读的方式打开文件 dbms_lobfileopen(f_lob, dbms_lobfile_readonly);--传递对象 dbms_lobloadfromfile(b_lob, f_lob, dbms_lobgetlength(f_lob)); --关闭原始文件
以上就是关于java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.全部的内容,包括:java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.、如何使用Blob数据类型在Postgres-database、如何给oracle导入blob和clob字段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)