好像是先commit,再关掉连接就能存进去了吧。
我用的是
PreparedStatement ps = Cn.prepareStatement("insert into table values(?)");
ps.setBinaryStream(1,fis,(int)file.length());
但图像大小受限制,最大4K。唉,只能用long row,存50K,不知道是不是数据库没搞好
:(
我用的是
PreparedStatement ps = Cn.prepareStatement("insert into table values(?)");
ps.setBinaryStream(1,fis,(int)file.length());
但图像大小受限制,最大4K。唉,只能用long row,存50K,不知道是不是数据库没搞好
:(
8.1.7就可以了
解决方法:( 参考aswill(小泥鳅不见首尾)和bblook(比比路克) ) database.setAutoCommit(false);
query="select PortraitData from portrait where personcode=1 for update";
ps=database.createPreparedStatement(query);
ResultSet rs=ps.executeQuery();
rs.next();
BLOB blob=((OracleResultSet)rs).getBLOB("PortraitData");
OutputStream os=blob.getBinaryOutputStream();
os.write(fbyte);
os.flush();
ps.execute("commit");
database.setAutoCommit(true);
解决方法:( 参考aswill(小泥鳅不见首尾)和bblook(比比路克) )
database.setAutoCommit(false);
query="select PortraitData from portrait where personcode=1 for update";
ps=database.createPreparedStatement(query);
ResultSet rs=ps.executeQuery();
rs.next();
BLOB blob=((OracleResultSet)rs).getBLOB("PortraitData");
OutputStream os=blob.getBinaryOutputStream();
os.write(fbyte);
os.flush();
ps.execute("commit");
database.setAutoCommit(true);问题分析:
这里有两个问题:
1、由于BLOB是从SELECT语句中选出来的,要修给BLOB,必须加FOR UPDATE语句(否则出现“LOB未锁定...”的错误)。(不知有没有简便的方法取得BLOB并向它写入数据)。
2、因为JB中对数据库的操作默认为“每执行一句SQL都当作事务提交”,提交后就无法对提交前取得的BLOB修改,(否则出现“读取顺序不一致”的错误)。所以要setAutoCommit(false),再写入BLOB,最后execute("commit")。