Проблема вставки .nextval JDBC

6

Я пытаюсь вставить в таблицу с последовательностью .nextval в качестве первичного ключа, sql в Java -

sql = "INSERT INTO USER 
         (USER_PK, ACCOUNTNUMBER, FIRSTNAME, LASTNAME, EMAIL ) 
       VALUES 
         (?,?,?,?,?)";
   ps = conn.prepareStatement(sql);
   ps.setString(1, "User.nextval");
   ps.setString(2, accountNumber);
   ps.setString(3, firstName);
   ps.setString(4, lastName);
   ps.setString(5, email);

Однако ошибка ORA-01722: invalid number

Все остальные поля верны, я думаю, что это проблема последовательности, это правильно?

  • 0
    Это должно быть 0 проиндексировано? Изменить: нет
  • 0
    Имя вашей последовательности Пользователь? Это должно быть SequenceName.NextVal. Кроме того, просто используйте подготовленный оператор для всего, НО sequencename.NextVal
Показать ещё 2 комментария
Теги:
jdbc
ora-01722

1 ответ

15
Лучший ответ

Проблема заключается в том, что первый столбец является числовым типом данных, но ваш подготовленный оператор представляет тип данных string/VARCHAR. Заявление выполняется как есть, то нет возможности для Oracle преобразовать ваше использование nextval для получения значения последовательности.

Здесь альтернатива через синтаксис Java PreparedStatement:

sql = "INSERT INTO USER 
        (USER_PK, ACCOUNTNUMBER, FIRSTNAME, LASTNAME, EMAIL ) 
       VALUES 
        (user.nextval, ?, ?, ?, ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, accountNumber);
ps.setString(2, firstName);
ps.setString(3, lastName);
ps.setString(4, email);

Это предполагает, что user представляет собой существующую последовательность - изменить в соответствии с.

  • 3
    Хотя лично, это была бы функция Oracle, если бы это зависело от меня. Тогда ссылка на последовательность будет в функции, просто предоставьте те же параметры для вставки.
  • 0
    Работал как шарм СПАСИБО! : D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню