it-roy-ru.com

Как вставить Big Integer в подготовленное заявление Java

Я хочу вставить большое целое значение, используя подготовленный оператор, у меня есть одна строковая переменная с именем xid (41527820021925053) 

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigInteger(3, xid);
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();

Я новичок в этом, как этого добиться.

7
user7098544

PreparedStatement не имеет метода setBigInteger().

Используйте один из этих методов:


ОБНОВЛЕНИЕ

Со следующим комментарием, сделанным OP , второй вариант выше (теперь выделенный) является правильным вариантом для использования, так как PostgreSQL bigint - это то же самое, что Java long.

ребята, я использую postgres, и у него есть тип данных bigint ["UniqueIdGenerator" ()], который представляет собой 17-значное большое целое число.

12
Andreas

Если вы говорите о целочисленном или длинном значении в строке, то вы можете просто использовать setString(idx, yourValue), setObject(idx, yourValue) или setObject(idx, yourValue, Java.sql.Types.BIGINT), драйвер должен преобразовать его в целевой тип.

Если вы говорите о Java.math.BigInteger, то драйвер, совместимый с JDBC 4.1 (или выше), должен позволить вам установить значение BigInteger в столбце BIGINT, CHAR, VARCHAR или LONGVARCHAR, используя setObject(idx, yourBigInteger) или setObject(idx, yourBigInteger, targetType), где targetType, например, Java.sql.Types.BIGINT или Java.sql.Types.VARCHAR.

Однако следует помнить, что не все драйверы поддерживают эту поддержку.

См. спецификация JDBC 4.1 section 3.1 Обзор изменений, таблица B-4 Отображение из типов объектов Java в типы JDBC, таблица B-5 Преобразования, выполняемые setObject и setNull между объектом Java Типы и целевые типы JDBC. Или, альтернативно, спецификация JDBC 4.2 , но затем только таблицы B-4 и B-5.

1
Mark Rotteveel

Ты можешь попробовать 

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigDecimal(3, BigDecimal.valueOf(Long.parseLong(xid))); //or you can try below
    preparedStatement.setBigDecimal(3, new BigDecimal(xid)); //both are correct
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();
0
deadpool