java - .nextval JDBC 插入问题

标签 java sql oracle jdbc ora-01722

我尝试插入到以sequence .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

其他字段都正确,我觉得是顺序的问题,这个正确吗?

最佳答案

问题是第一列是数字数据类型,但您准备好的语句提交的是字符串/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 是一个现有的序列——改变以适应。

关于java - .nextval JDBC 插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4496336/

相关文章:

java - 如何在 Java Swing 中构建 Google-chrome 选项卡和菜单栏界面?

java - 更改 Eclipse 所需的 Java 版本

mysql - SQL 将 int 转换为日期时间

MySQL查询返回的行数比预期多,我如何只返回每组中一列的最高值?

oracle - UUID最大字符长度

java - 为什么可以在 Java 接口(interface)方法上调用方法? [可比]

java - IntelliJ IDEA - SQL Inside Java 代码的语法高亮

sql - SQL分组依据用户定义函数的输出

java - 504 生成 Excel 文件时网关超时

java - WebDriver 无法对具有 onclick=function1() 作为属性的输入元素执行单击