Я пытаюсь вставить серию значений в sql-запрос с использованием Java postgresql jdbc4.java.sql.Connection createArrayOf() всегда возвращает null
java.sql.Connection
определяет способ преобразования Object[]
в java.sql.Array
: conn.createArrayOf(String typeName, Object[] elements)
Единственная проблема, независимо от того, что я стараюсь, она всегда возвращает нуль.
public Array makeQueryBigintArray(Object[] values) throws SQLException {
Array result = conn.createArrayOf("bigint", values);
// "result" is null at this point, but shouldn't be
return result;
}
conn
извлекается через рабочую javax.sql.DataSource
с помощью dataSource.getConnection()
. conn
работает для всех наших других баз данных, но его метод createArrayOf()
всегда возвращает значение null.
Я пробовал как верхний регистр «BIGINT», так и строчный «bigint» для typeName, согласно this question, безрезультатно.
Когда я выкапываю отладчик, я обнаружил, что conn
- это org.apache.commons.dbcp.PoolableConnection
упаковка org.postgresql.jdbc4.Jdbc4Connection
.
Если функция не поддерживалась postgres/JDBC4, я ожидал бы, что она вызовет ее, чтобы выдать SQLException, указывающую, что она не поддерживается. Никакое исключение не выбрасывается.
Любые подсказки относительно почему это возврат null?
Как это исправить, или как передать в массив или Список значений значение PreparedStatement
?
Вы используете новый драйвер JDBC 4 (!) PostgreSQL? Похоже, что он реализован: https://github.com/pgjdbc/pgjdbc/blob/master/org/postgresql/jdbc4/AbstractJdbc4Connection.java#L88 (и существует уже несколько лет) –
Не могли бы вы попробовать с ' "int8" '? '" bigint "' является просто псевдонимом '' int8 "' (но оба должны использоваться в этом контексте). – pozs
@MarkRotteveel Мы используем сборку, которая только 2 строит за самым последним PostgreSQL JDBC. То есть мы используем сборку 1002, а сборка 1004 является самой актуальной по состоянию на 12/19/14. У меня были подобные мысли, что, может быть, это был действительно старый, но это последнее. –