在DB2数据库中的BLOB列,我有如下表:的OutputStream到DB2数据库表
CREATE TABLE MyTestTable
(
MYPATH VARCHAR(512) NOT NULL,
MYDATA BLOB,
CONSTRAINT MYTESTTABLE_PK PRIMARY KEY (MYPATH)
);
使用Java,我想在这个表与新斑块数据来更新现有的行。我的首选方法是获取OutputStream到BLOB列&将我的数据写入OutputStream。
这里是我使用的测试代码:
Connection connection = null;
PreparedStatement pStmnt = null;
ResultSet rSet = null;
try {
connection = ... // get db connection
String id = ... // set the MYPATH value
String sql = "SELECT MYDATA FROM MyTestTable WHERE MYPATH='"+id+"' FOR UPDATE";
pStmnt = connection.prepareStatement(sql);
rSet = pStmnt.executeQuery();
while (rSet.next()) {
Blob blobData = rSet.getBlob("MYDATA"); // this is a java.sql.Blob
OutputStream blobOutputStream = blobData.setBinaryStream(1);
blobOutputStream.write(data);
blobOutputStream.close();
connection.commit();
}
}
// close ResultSet/PreparedStatement/etc in the finally block
上面的代码工作的Oracle数据库。
但是,在DB2中,调用setBinaryStream来获取OutputStream似乎不起作用。数据没有得到更新,我也没有收到任何错误消息。
问:如何获得OutputStream到DB2表的BLOB列?上面的代码中可能需要更改什么?
如果没有看到您的代码,我会冒昧猜测您可能没有正确提交交易。 Connection.close()上的Oracle JDBC驱动程序默认提交正在进行的事务,而DB2驱动程序默认会将其回滚。 – mustaccio 2014-10-02 11:37:03
您是否看过IBM提供的示例代码,了解如何执行此操作? http://www-01.ibm.com/support/knowledgecenter/#!/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.sample.doc/doc/java_jdbc/s-DtLob-java.html – 2014-10-02 15:52:22
@ mustaccio ...我添加了我的测试代码。我正在做一个提交。但它似乎没有更新数据。 – Perihelion 2014-10-03 05:05:42