問題は、最初の列が数値データ型であるが、プリペアドステートメントが文字列/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
は既存のシーケンスです-それに合わせて変更してください。