2013-06-13 1 views
2

Я пытаюсь создать собственный обработчик типа FILE MyBatis для BLOB Postgres.JDBC: Как получить текущее соединение?

Вот метод мне нужно реализовать, чтобы выполнить интерфейс:

@Override 
public File getNullableResult(ResultSet rs, String columnName) throws SQLException { 
    1.get current connection 
    2.get postgreSQL LargeObjectManager from current connection 
    3.get oid from ResultSet, so the Larget Object can be found 
    4.read the large object and rewrite it into a file 
    5.return the file 
} 

Однако я не знаю, как получить текущее соединение в этой ситуации. Есть ли способ получить соединение с ResultSet?

Спасибо заранее,

UPDATE:

PostgreSQL реализует блоб (большой объект, а не BYTEA) в специальном (нестандартный возможно) способ. Он сохраняет все blob в таблице pg_largeobject и использует oid как «указатель», поэтому вы можете ссылаться на blob из вашей реальной таблицы.

Postgres Драйвер JDBC имеет интерфейс API для управления блобом. Более подробно в следующей ссылке: http://jdbc.postgresql.org/documentation/91/binary-data.html

+0

Разве вы не можете просто получить блоб непосредственно из набора результатов? –

+0

@MarkRotteveel no, PostgreSQL реализует blob специальным способом. Он сохраняет все blob в таблице pg_largeobject и использует oid как «указатель», поэтому вы можете ссылаться на blob из вашей реальной таблицы. – Xin

+1

Интересно, я бы ожидал, что драйвер JDBC postgresql скроет эту деталь реализации. –

ответ

1

Вы можете использовать:

Connection connection = rs.getStatement().getConnection(); 

Но проверить этот метод на получение данных BLOB непосредственно из rs:

rs.getBinaryStream("myBlobColumn"); 
+0

Я не могу получить blob из результатов для Postgres. См. Мое обновление. – Xin