使用 Java 为 DB2 和 Oracle 插入 BLOB

Posted

技术标签:

【中文标题】使用 Java 为 DB2 和 Oracle 插入 BLOB【英文标题】:Insert BLOB using java for both DB2 and Oracle 【发布时间】:2013-05-03 22:41:54 【问题描述】:

我目前正在验证在 Oracle 上为 DB2 开发的应用程序。由于我们不想维护两个单独的源,我需要一些查询来将 blob 插入到字段中,这在 oracle 和 db2 中都可以使用。我没有任何标识符来区分应用程序在哪个数据库下运行。

我在 oracle 中使用了utl_raw.cast_to_raw,在 DB2 中使用了CAST() as BLOB,它们相互不兼容。

【问题讨论】:

【参考方案1】:

您将无法找到使用某种类型转换的通用 SQL。但是您可以使用 JDBC 的 setBinaryStream() 使用“普通”SQL 来做到这一点

PreparedStatement pstmt = connection.prepareStatement(
   "insert into blob_table (id, blob_data) values (?, ?)";

File blobFile = new File("your_document.pdf");
InputStream in = new FileInputStream(blobFile);

pstmt.setInt(1, 42);
pstmt.setBinaryStream(2, in, (int)blobFile.length());
pstmt.executeUpdate();
connection.commit();

您可以使用 setBinaryStream()UPDATE 语句相同的方式。

【讨论】:

我有一个字符串类型的变量中的数据。用上面的方法把String转成BinaryStream可以吗?? @Saju:你怎么能有一个 binary 大对象作为字符串?该列的实际(例如 Oracle)数据类型是什么?如果那是CLOB(而不是BLOB),您应该使用setCharacterStream() 而不是setBinaryStream() 也许@Saju 在 Oracle 中表示 NCLOB,在 DB2 中表示 DBCLOB。

以上是关于使用 Java 为 DB2 和 Oracle 插入 BLOB的主要内容,如果未能解决你的问题,请参考以下文章

表的操作(Oracle和DB2)

SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase(代码片

使用 DBlink 进行 oracle 插入

将 DB2 查询转换为 oracle 查询

如何在一条语句中将多行插入 DB2?

将 DB2 日期计算转换为 Oracle 语法