JDBC操作blob的疑惑,请大虾们解惑

呸呸呸呸呸呸呸呸呸 2012-07-03 08:03:40
JDBC操作oracle的blob或clob是不是一定要用下面的方式?先插个empty_blob(),再select回来?


Statement st = con.createStatement();
//插入一个空对象
st.executeUpdate("insert into BLOBIMG values(1,empty_blob())");
//用for update方式锁定数据行
ResultSet rs = st.executeQuery(
"select contents from BLOBIMG where id=1 for update");
if (rs.next()) {
//使用oracle.sql.BLOB类,没办法了,变成专用的了
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1).;
//到数据库的输出流
OutputStream outStream = blob.getBinaryOutputStream();
//这里用一个文件模拟输入流
File file = new File("d://proxy.txt");
InputStream fin = new FileInputStream(file);
//将输入流写到输出流
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ( (len = fin.read(b)) != -1) {
outStream.write(b, 0, len);
}


直接 setBinaryStream 或 setBlob 会有什么问题吗?
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-07-03
  • 打赏
  • 举报
回复
我手头的是11g,但是我记得10g应该是没问题,顺便搜索了下:

http://www.cjsdn.net/post/view?bid=10&id=79413&sty=3

  • 打赏
  • 举报
回复
楼上个老大,新一代JDBC驱动指?
oracle10带的ojdbc14.jar算新一代的不?
MiceRice 2012-07-03
  • 打赏
  • 举报
回复
因为这种做法,会依赖于JDBC的实现能力,不同数据库的JDBC实现效果有较大差异,此外旧的JDBC能力实现上也往往比较弱。

但大型数据库和新一代JDBC驱动的能力都已经大大增强,所以此类特性基本都已经得到支持了。

尤其你说的是Oracle,这个成熟度已经很高了。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用PreparedStatement,可以直接在Insert时完成Blob的插入操作,具体参见:
http://tech.it168.com/j/2007-09-24/200709241012872.shtml
[/Quote]

谢谢,看完了,请教下这位大虾,为何网上那么多的帖子都要用empty_blob(),再select回来?
甚至有些书上也是这么写,很疑惑,能简单处理为何搞那么复杂?
jerrygr_ok 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用PreparedStatement,可以直接在Insert时完成Blob的插入操作,具体参见:
http://tech.it168.com/j/2007-09-24/200709241012872.shtml
[/Quote]

+1
MiceRice 2012-07-03
  • 打赏
  • 举报
回复
用PreparedStatement,可以直接在Insert时完成Blob的插入操作,具体参见:
http://tech.it168.com/j/2007-09-24/200709241012872.shtml

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧