Java中与oracle.sql.BLOB相当的PostgreSQL
我使用Java中与oracle.sql.BLOB相当的PostgreSQL,java,sql,oracle,postgresql,blob,Java,Sql,Oracle,Postgresql,Blob,我使用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 显然,它不起作用,因为cre
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连接
bytea
列。我能做以下几件事吗?或者有没有一种合适的方法来达到同样的效果
ps.setBytes(++i, someString.getBytes());
oracle.sql.BLOB
,即使它是oracle连接)如果您确实使用了
setBytes()
(我不记得是否有其他psql或非psql特定的blob方法),请记住向someString.getBytes()
添加字符编码
至于让您的代码独立于数据库,请停止使用特定于数据库的类。仅使用java.sql.*类就可以走很长的路。只有当您必须深入研究实际实现的驱动程序类时,这才应该是一个特例。谢谢您的评论。如果您也能为这里的问题提供一些答案,那就太好了。为什么要使用
BLOB
来存储字符串
?这更好地存储在CLOB
(Postgres中的text
)请参见我的答案:这里是独立于DBMS的solution@a_horse_with_no_name这不是我的密码。程序员在这个例子中使用它是有原因的。我们并不是对每根弦都这样做。谢谢你的链接。请问,setBinaryStream
如何优于setBytes
?setBytes
足够吗?根据我的经验,setBinaryStream()
适用于所有JDBC驱动程序,而有些驱动程序不支持setBytes()
。如果您确切地知道将使用哪些驱动程序,并且这些驱动程序也支持setBytes()
,那么它就没有问题。