带SQL的JAVA:insert命令的返回值?
我有一个作者表:authorID,authorName。 authorID是一个带自动增量的pk。
我想在java中编写一个从用户获取名称并将其添加到表中的方法。 但是我需要返回作者的id。 有没有办法用1 sql语句做到这一点?
例如,如果我的代码有命令:
stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
其中string.get(1)是作者姓名。
现在,如果我写:
ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
它表示错误,因为rs是结果集,但返回的值是int。 这是我插入的行的pk吗?
尝试
stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); rs.next(); long pk = rs.getLong(1);
创建PreparedStatement
传递Statement.RETURN_GENERATED_KEYS conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
和PreparedStatement#getGeneratedKeys()
在惰性后返回自动生成的密钥。
为了获得最后插入的id,请查看以下代码:
PreparedStatement stmnt = Conn.preparedStatement("INSERT INTO authors(col1) VALUES (?)", Statement. RETURN_GENERATED_KEYS ); stmnt.setString(col1val); stmnt.executeUpdate(); ResultSet rs=stmnt.getGeneratedKeys(); if(rs.next()){ System.out.println(rs.getInt(1)); }
我不知道JDBC是否支持它(暂时没有使用它),但我想你可以尝试:
INSERT INTO TABLE_NAME (FIELD1, FIELD2) VALUES ('foo', 'bar') RETURNING FIELD3
通过executeQuery()或者,如果你的jdbc驱动程序不支持RETURNING
写一个简单的存储函数。
您使用的是哪个RDMBS?
尝试:
INSERT INTO authors VALUES (...) returning authorID
执行时,使用executeQuery
执行此操作。 您应该返回一个包含一行和一列的ResultSet
– 它将是ID。