java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.

java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.,第1张

你把一下的代码加入到一个类里就可以了,我已经测试过了,由于字数的限制不能把完整的类发上来。

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字段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9856203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存