.nextval JDBC插入问题 [英] .nextval JDBC insert problem

查看:428
本文介绍了.nextval JDBC插入问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试以序列.nextval作为主键插入表中,Java中的sql是

I try to insert into table with sequence .nextval as primary key, the sql in Java is

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:无效数字

所有其他字段都是正确的,我认为这是序列问题,这是正确的吗?

All the other fields are correct, I think it is the problem of sequence, is this correct?

推荐答案

问题是第一列是数字数据类型,但您准备好的语句正在提交字符串/ VARCHAR数据类型。该语句按原样运行,Oracle没有机会转换你使用nextval来获取序列值。

The problem is that the first column is a numeric data type, but your prepared statement is submitting a string/VARCHAR data type. The statement is run as-is, there's no opportunity for Oracle to convert your use of nextval to get the sequence value.

这是Java的PreparedStatement语法的另一种选择:

Here's an alternative via Java's PreparedStatement syntax:

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);

这假设用户是现有序列 - 改为适合。

This assumes that user is an existing sequence -- change to suit.

这篇关于.nextval JDBC插入问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆