jdbc подготовил оператор с типом Oracle NUMBER

У меня есть приложение java, которое устанавливает соединение jdbc с базой данных Orcale. Я пытаюсь вставить данные в базу данных, но меня сбивает с толку, когда речь идет о типе Oracle NUMBER. У меня есть три столбца в моей таблице, которые относятся к этим типам соответственно.

NUMBER(38,0)
NUMBER(20,0)
NUMBER(16,0)

Мой первый вопрос: в какой тип java я должен поместить данные, чтобы использовать их в подготовленном операторе.

Мой второй вопрос: какую операцию набора я могу использовать в подготовленном операторе, чтобы вставить данные.

Предположим, мы работаем с NUMBER (38,0). Могу ли я установить тип java на BigInteger? Если бы у меня было целое число 1, это было бы

 BigInteger one = new BigInteger(1);

Тогда в моем подготовленном заявлении это будет

 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?)");
 pstmt.setLong(1, one);

Кажется, это не работает, поэтому я предполагаю, что это неверно. Любая помощь будет оценена.


person medium    schedule 27.06.2013    source источник
comment
вы пробовали setBigDecimal () docs. oracle.com/javase/6/docs/api/java/sql/, java.math.BigDecimal)   -  person Bhavik Shah    schedule 27.06.2013
comment
@BhavikShah Я пробовал setBigDecimal, он все еще дает мне ORA-00911: недопустимый символ. Я даже создаю и распечатываю оператор вставки sql, а затем вставляю его в разработчик sql, и он отлично работает. Это только ошибка в java.   -  person medium    schedule 27.06.2013
comment
Я ответил на несколько вопросов, похожих на этот .., к сожалению, ответов нет :( .. один ответ, однако, предлагал сохранить его как строку .. работает ли это для вас?   -  person Bhavik Shah    schedule 27.06.2013
comment
@medium - это ваше собственное высказывание или вы его редактировали? Просто интересно, оставили ли вы точку с запятой в конце командной строки - которая будет работать в SQL Developer, но передать ORA-00911 через JDBC.   -  person Alex Poole    schedule 27.06.2013
comment
Я понял, в чем проблема ... Мне неловко сказать, что в моей строке prepareStatment я добавил точку с запятой в конце conn.prepareStatement (INSERT INTO TABLE (bigInt) VALUES (?);); Извините .. спасибо за помощь   -  person medium    schedule 27.06.2013


Ответы (2)


setLong() не может взять BigInteger. Если у вас действительно есть значения, превышающие диапазон long в вашей базе данных, вам может потребоваться использовать setBigDecimal(), так как setBigInteger() нет, и ваша переменная должна быть типа BigDecimal. Если long охватывает диапазон значений в вашей базе данных, просто используйте long и setLong().

person GriffeyDog    schedule 27.06.2013

вы можете попробовать так:

 oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue);
 cs.setObject(id, numberValue, OracleTypes.NUMBER);

где bigIntegerValue - это экземпляр java.math.BigInteger, у меня работает

person Marcio Duarte    schedule 26.09.2014