我试图弄清楚如何使用PostgreSQL和JDBC获取最后插入行的id。
CREATE TABLE vet_care (
id serial PRIMARY KEY,
deworming int,
castration int
);
我的查询是
String insertVetCare = "INSERT INTO vet_care(castration,deworming) VALUES("+castrated+","+dewormed+") RETURNING id";
我想要id值(这是串行的)供以后使用。我试图像这样执行查询:
int id = statement.executeUpdate(insertVetCare);
但是这在编译之后说,“当没有人预料到时会返回结果。”并且它不会将其他值插入表中。
我怎样才能让它发挥作用?
答案 0 :(得分:3)
如果“id”表示“生成的身份密钥”,那么你就错了。
executeUpdate()
方法根据javadocs返回受影响的行数。
您希望它返回自动生成的密钥,例如this。
更多建议:使用PreparedStatement
并绑定值。构建SQL查询就是要求SQL注入攻击。
// Why make the gc work? This query never changes.
private static final String INSERT_VET_CARE = "INSERT INTO vet_care(castration,deworming) VALUES(?, ?)";
PreparedStatement ps = connection.prepareStatement(INSERT_VET_CARE, Statement.RETURN_GENERATED_KEYS);
ps.setInt(1, castration);
ps.setInt(2, deworming);