JDBC查询RETURNING值

时间:2015-04-17 14:25:14

标签: java postgresql jdbc

我试图弄清楚如何使用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);

但是这在编译之后说,“当没有人预料到时会返回结果。”并且它不会将其他值插入表中。

我怎样才能让它发挥作用?

1 个答案:

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