简体   繁体   中英

JDBC query RETURNING value

I have a problem trying to figure out how to get the id of the last inserted row using PostgreSQL and JDBC.

    CREATE TABLE vet_care (
        id serial PRIMARY KEY,
        deworming int,
        castration int
    );

My query is

String insertVetCare = "INSERT INTO vet_care(castration,deworming) VALUES("+castrated+","+dewormed+") RETURNING id";

I want the id value (which is serial) for later use. I tried to execute the query like so:

int id = statement.executeUpdate(insertVetCare);

But this says after compilation, that "A result was returned when none was expected." and it does not insert the other values into table.

How can I get this to work?

If "id" means "generated identity key", then you've got it wrong.

The executeUpdate() method returns the number of affected rows, according to the javadocs .

You want it to return auto generated keys, like this .

More advice: Use PreparedStatement and bind values. Building up a SQL query that way is asking for a SQL injection attack.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM