0

我有以下代码使用oracle.sql.BLOB

BLOB b = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);
//conn is a PostgreSQL connection (java.sql.Connection object)
b.setBytes(1, someString.getBytes());
ps.setBlob(++i, b); //ps is a PreparedStatement

显然它不起作用,因为createTemporary需要一个 Oracle 连接。

  1. 使用 Postgres 连接实现此目的的等效方法是什么?我了解Blob的 Postgres 等价物是ByteA。目标列是一bytea列。我可以执行以下操作吗?或者有没有达到相同效果的适当方法?

    ps.setBytes(++i, someString.getBytes());
    
  2. 另外,如何使特定于 Oracle 的代码与 DB 供应商无关?(避免使用oracle.sql.BLOB即使是Oracle连接)

4

1 回答 1

1

如果您确实使用setBytes()(我不记得是否有其他 psql 或非 psql 特定的 blob 方法),请记住将字符编码添加到您的someString.getBytes().

至于使您的代码独立于数据库,请停止使用数据库特定的类。仅使用 java.sql.* 类就可以走很长一段路。当您必须深入研究实际实现的驱动程序类时,这应该只是一种特殊情况。

于 2013-09-06T05:20:10.640 回答