我正在尝试使用mysql_insert_id()
方法检索JSP中最后生成的自动增量ID,例如PHP last_insert_id()
函数或MySQL getGeneratedKeys()
函数,如下所述{ {3}}(我使用的是Oracle 10g)。
我在Oracle数据库中有一个TRANSPORTER
表,其中有一个名为TRANSPORTER_ID
的{{1}}类型的列,它被映射到Java中的NUMBER(35, 0)
类型,它是一个序列生成主键。
BigDecimal
执行插入操作后,代码会尝试在前面的Connection con;
ResultSet rs;
PreparedStatement ps;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "root";
String pwd = "root";
Class.forName("oracle.jdbc.OracleDriver").newInstance();
con = DriverManager.getConnection(url, user, pwd);
ps = con.prepareStatement("INSERT INTO transporter(transporter_name, transporter_website)VALUES(?, ?)");
ps.setString(1, "New");
ps.setString(2, "New Website");
ps.executeUpdate();
BigDecimal id = new BigDecimal(0);
rs = ps.getGeneratedKeys();
while (rs.next()) {
id = rs.getBigDecimal("transporter_id");
}
out.println("The generated id is : " + id);
循环之上调用此方法rs = ps.getGeneratedKeys();
,并且失败并出现以下异常。
javax.servlet.ServletException:java.sql.SQLException:不是操作 允许
我尝试使用while
,当它失败时我下载了更高版本Oracle JDBC Driver version - 10.2.0.5.0
,但无济于事。可能是什么原因?
答案 0 :(得分:5)
我发现了some documentation。它适用于11g,但10g的情况可能会更好。
您的错误的近因可能是以下限制:
您需要按位置访问getGeneratedKeys方法返回的ResultSet对象
似乎Oracle驱动程序还要求您识别密钥列,以便它检索密钥列而不仅仅是ROWID
。此示例代码包含在链接文档中。
答案 1 :(得分:0)
ps = con.prepareStatement(“ INSERT INTO transporter(transporter_name,transporter_website)VALUES(?,?)”,新String [] {“ transporter_id”});