【发布时间】:2014-11-27 04:01:20
【问题描述】:
在 DB2 数据库中,我有下表:
CREATE TABLE MyTestTable
(
MYPATH VARCHAR(512) NOT NULL,
MYDATA BLOB,
CONSTRAINT MYTESTTABLE_PK PRIMARY KEY (MYPATH)
);
使用 Java,我希望用新的 blob 数据更新此表中的现有行。我的首选方法是获取 BLOB 列的 OutputStream 并将我的数据写入 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 DB。
但是,在 DB2 中,调用 setBinaryStream 来获取 OutputStream 似乎不起作用。数据没有更新,我也没有收到任何错误消息。
问:我怎样才能得到一个输出流到 DB2 表的 BLOB 列?上述代码中可能需要更改什么?
【问题讨论】:
-
如果没有看到您的代码,我冒昧地猜测您可能没有正确提交事务。
Connection.close()上的 Oracle JDBC 驱动程序隐式提交一个正在进行的事务,而默认情况下 DB2 驱动程序会将其回滚。 -
您是否查看过 IBM 提供的有关如何执行此操作的示例代码? www-01.ibm.com/support/knowledgecenter/#!/SSEPGG_10.5.0/…
-
@mustaccio ...我已经添加了我的测试代码。我正在做一个提交。但它似乎没有更新数据。
-
@IanBjorhovde ...感谢您的链接。但是,该链接没有提供任何有关使用 OutputStream 的示例,这正是我正在寻找的
-
更新表行的标准方法是使用
UPDATE语句。如果出于某种原因您更喜欢可更新结果集的抽象,您需要在prepareStatement()调用中指定适当的参数,并使用必要的方法来更新列。 The manual explains how to do that.
标签: java database jdbc db2 blob