Проблема вставки .nextval JDBC - PullRequest
6 голосов
/ 21 декабря 2010

Я пытаюсь вставить в таблицу с последовательностью .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

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

1 Ответ

15 голосов
/ 21 декабря 2010

Проблема в том, что первый столбец имеет числовой тип данных, но ваш подготовленный оператор отправляет тип данных 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 - существующая последовательность - измените в соответствии с.

...