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在数据库里运行是正常的,不知道是为什么?请大虾指教!

解决方案 »

  1.   

    可能要循环吧,你就写了一个字节
    outStream.write(mycontent);
      

  2.   

    不是这个问题,是(rs.getBlob("xp"))=null,导致blob=null,然后运行到OutputStream outStream = blob.getBinaryOutputStream();这句就报空指针异常
      

  3.   

    想错。不过感觉你这句话是有问题的。你是想写入mycontent,好像不是这么写吧
      

  4.   

    写入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;
      

  5.   

    查了一下,好像说是入库的时候出问题,LZ,你发下你入库BLOB的程序。
      

  6.   

    现在的问题不是往数据库写东西的问题,是在ResultSet中的不到blob的字段
      

  7.   

    知道啊,你插入数据的insert语句是什么样的,用empty_blob,用null?据说有关,看看啊。
      

  8.   

    好像是数据库里xp自段是空值,所以oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("xp");这句中的blob是空值,可是我现在就是要去往xp字段里存东西,要是blob为空的话这两句保存数据的就没法运行了(报空指针异常)OutputStream outStream = blob.getBinaryOutputStream();
                        outStream.write(mycontent);