8

シーケンス .nextval を主キーとしてテーブルに挿入しようとしましたが、Java の SQL は

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

他のすべてのフィールドは正しいです。これは順序の問題だと思いますが、これは正しいですか?

4

1 に答える 1

17

問題は、最初の列が数値データ型であることですが、準備されたステートメントは文字列/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これは、これが既存のシーケンスであることを前提としており、それに合わせて変更します。

于 2010-12-21T04:47:17.160 に答える