У меня есть следующий код, используя oracle.sql.BLOB
PostgreSQL эквивалент oracle.sql.BLOB в Java
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 is ByteA. Целевой столбец - столбец
bytea
. Могу ли я просто сделать следующее? Или есть правильный способ достижения такого же эффекта?ps.setBytes(++i, someString.getBytes());
Также, как сделать код, специфичный для Oracle, независимым от поставщика DB? (Избегая использования
oracle.sql.BLOB
, даже если это соединение Oracle)
Почему вы используете 'BLOB' для хранения' String'? Это намного лучше хранится в 'CLOB' (' text' в Postgres) –
См. Мой ответ здесь: http://stackoverflow.com/a/8349906/330315 и здесь http://stackoverflow.com/a/16462192/ 330315 для независимого решения СУБД –
@a_horse_with_no_name Это не мой код. Есть причины, по которым программисты использовали его для этого экземпляра. Мы не делаем этого для каждой строки. Спасибо за ссылки. Могу ли я спросить, как 'setBinaryStream' лучше, чем' setBytes'? будет ли 'setBytes' достаточно здесь? – ADTC