java 读写 oracle blob 字段出错

&永无止境 2008-04-23 02:36:51
public void blobWrite(String  tablename, long rowid, byte[] mycontent ){
try{

String newid=java.lang.String.valueOf(rowid);
String content = new String();

//
System.out.println("开始将数据写入到blob列中");
conn.setAutoCommit(false);
//前提是插入成功,id 唯一,且存在 ID字段
String sql2 = "select xm,xp from "+tablename+" where id="+newid+" for update";
System.out.println(sql2);
Statement st = conn.createStatement();
ResultSet rs=st.executeQuery(sql2);
if(rs.next()){
System.out.println(rs.getString("xm"));
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("xp");
OutputStream outStream = blob.getBinaryOutputStream();
outStream.write(mycontent);
outStream.flush();
outStream.close();
conn.commit();
rs.close();
st.close();
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}

xm打印正常,但是rs.getBlob("xp")一直为空,使用sql2在数据库里运行是正常的,不知道是为什么?请大虾指教!
...全文
118 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
&永无止境 2008-04-28
  • 打赏
  • 举报
回复
好像是数据库里xp自段是空值,所以
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("xp");
这句中的blob是空值,可是我现在就是要去往xp字段里存东西,要是blob为空的话这两句保存数据的就没法运行了(报空指针异常)
OutputStream outStream = blob.getBinaryOutputStream();
outStream.write(mycontent);
胡矣 2008-04-23
  • 打赏
  • 举报
回复
留个记号
jiazhengjing 2008-04-23
  • 打赏
  • 举报
回复
知道啊,你插入数据的insert语句是什么样的,用empty_blob,用null?据说有关,看看啊。
&永无止境 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ExceedGods 的回复:]
不是这个问题,是(rs.getBlob("xp"))=null,导致blob=null,然后运行到OutputStream outStream = blob.getBinaryOutputStream();这句就报空指针异常
[/Quote]
现在的问题不是往数据库写东西的问题,是在ResultSet中的不到blob的字段
jiazhengjing 2008-04-23
  • 打赏
  • 举报
回复
查了一下,好像说是入库的时候出问题,LZ,你发下你入库BLOB的程序。
lifanfly 2008-04-23
  • 打赏
  • 举报
回复
写入blob:
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("xp");
InputStream blob_in= blob.getBinaryOutputStream();

int tmp;
while((tmp=blob_in.read())!=-1){
file.write(tmp);
}
file.close;
blob_in.close;
connection.close;
jiazhengjing 2008-04-23
  • 打赏
  • 举报
回复
好像又没错,晕,我思维太乱了。帮顶,继续想
jiazhengjing 2008-04-23
  • 打赏
  • 举报
回复
想错。不过感觉你这句话是有问题的。你是想写入mycontent,好像不是这么写吧
&永无止境 2008-04-23
  • 打赏
  • 举报
回复
不是这个问题,是(rs.getBlob("xp"))=null,导致blob=null,然后运行到OutputStream outStream = blob.getBinaryOutputStream();这句就报空指针异常
jiazhengjing 2008-04-23
  • 打赏
  • 举报
回复
可能要循环吧,你就写了一个字节
outStream.write(mycontent);
&永无止境 2008-04-23
  • 打赏
  • 举报
回复
up

62,623

社区成员

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

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