通常插入含blob字段的记录时,会插入一个空blob字段,然后选出改条记录写入blob内容,如果这条记录的主键为sequence如如何选出该条记录那?我这里老报rs记录集为空的错误。
[b]问题补充:[/b]
to totong:我用了currval还是不行呀:[code="java"]
try {
String updatesql = "update sentmessagebufferlog set sendresult='9' where sentmessageid ='"
+ sentmessageid + "'";
log.debug("updatesql is:" + updatesql);
String insertsql = "insert into sentmessagebufferlog (sentmessageid,bufferdata,destination,messageid,memo,resendnumber,sentlogtime) values(SEQ_SENT_MESSAGE.nextval,empty_blob(),'"
+ destination
+ "','"
+ messageid
+ "','"
+ memo
+ "','"
+ resendnumber
+ "',to_date('"
+ sentlogtime + "','yyyy-MM-dd HH24:mi:ss '))";
conn = ConnectionManager.currentConnection();
conn.setAutoCommit(false);
stmt = DBUtil.getStatement(conn);
int rsupdate = stmt.executeUpdate(updatesql);
int rsinsert = stmt.executeUpdate(insertsql);
String updatestate = String.valueOf(rsupdate);
String insertstate = String.valueOf(rsinsert);
rs = stmt.executeQuery("select SEQ_SENT_MESSAGE.currval from dual");
String id = rs.getString(0);
rsblob = stmt
.executeQuery("select bufferdata from sentmessagebufferlog where rownum='"+id+"' for update");
if (rsblob.next()) {
oracle.sql.BLOB blob = (BLOB) rsblob.getBlob("bufferdata");
outStream = (OutputStream) ((oracle.sql.BLOB) blob)
.getBinaryOutputStream();
byte[] data = buffercontent.getBytes(); // System.out.println("data
// is:"+data);
outStream.write(data, 0, data.length);
}
outStream.flush();
outStream.close();
conn.commit();
log.debug("rs is:" + updatestate);
// String Json="{success:";
if (updatestate.equals("1") && insertstate.equals("1")) {
Json += "true";
Json += "," + "check:true";
Json += "," + "update:true";
log.info(" success update nodeconfig a record");
}
else
{
Json += "false";
Json += "," + "check:true";
Json += "," + "update:false";
log.info(" failure update nodeconfig a record");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("insert error");
conn.rollback();
Json += "false";
Json += "," + "check:true";
Json += "," + "update:false";
log.info(" failure update nodeconfig a record");
} finally {
if(rs!=null)
{
rs.close();
}
if(rsblob!=null)
{
rsblob.close();
}
if(stmt!=null)
{
stmt.close();
}
if(conn!=null)
{
conn.close();
}
//rsblob.close();
}
Json += "}";
[/code]代码贴上
序列有CurrVal和NextVal,使用CurrVal可以获得当前值
你应该是使用了两次NextVal才造成结果集为空,试下第二次取记录的时候用CurrVal