【发布时间】:2013-09-10 02:38:13
【问题描述】:
我有以下代码使用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 连接。
-
使用 Postgres 连接实现此目的的等效方法是什么?我了解 Blob 的 Postgres 等价物是 ByteA。目标列是
bytea列。我可以执行以下操作吗?或者有没有合适的方法达到同样的效果?ps.setBytes(++i, someString.getBytes()); 另外,如何使特定于 Oracle 的代码与 DB 供应商无关? (避免使用
oracle.sql.BLOB,即使是Oracle连接)
【问题讨论】:
-
为什么要用
BLOB来存储String?最好存储在CLOB(Postgres 中的text)中 -
在此处查看我的答案:stackoverflow.com/a/8349906/330315 和此处stackoverflow.com/a/16462192/330315 以获得独立于 DBMS 的解决方案
-
@a_horse_with_no_name 这不是我的代码。程序员在这种情况下使用它是有原因的。我们不会对每个字符串都这样做。感谢您的链接。请问,
setBinaryStream比setBytes好多少?setBytes够吗? -
根据我的经验,
setBinaryStream()适用于所有 JDBC 驱动程序,而某些驱动程序不支持setBytes()。如果您确切知道您将使用哪些驱动程序并且这些驱动程序也支持setBytes(),那么它没有任何问题。
标签: java sql oracle postgresql blob