Vấn đề là cột đầu tiên là kiểu dữ liệu số, nhưng câu lệnh đã chuẩn bị của bạn đang gửi kiểu dữ liệu chuỗi / VARCHAR. Câu lệnh được chạy nguyên trạng, không có cơ hội để Oracle chuyển đổi việc sử dụng nextval của bạn để lấy giá trị chuỗi.
Đây là một giải pháp thay thế thông qua cú pháp PreparedStatement của Java:
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);
Điều này giả định rằng user
là một trình tự hiện có - hãy thay đổi cho phù hợp.