我使用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连接实现此目的的等效方法是什么?我理解Postgres相当于 Blob 是 ByteA 。目标列是bytea
列。我可以这样做吗?还是有正确的方法来达到同样的效果?
ps.setBytes(++i, someString.getBytes());
此外,如何使Oracle特定代码与数据库供应商无关? (即使是Oracle连接,也避免使用oracle.sql.BLOB
)
答案 0 :(得分:1)
如果您确实使用setBytes()
(我不记得是否还有其他psql或非psql特定的blob方法),请务必记住向someString.getBytes()
添加字符编码。
至于使代码与数据库无关,请停止使用特定于db的类。只需java.sql。*类就可以走很长的路。当你必须挖掘实际的实现驱动程序类时,它应该只是一个特例。