0

I woudlike to generate automatically a new id (primary key) when I use INSERT INTO :

    String id = "1";
    PreparedStatement prep = conn.prepareStatement("INSERT INTO TABLE (id) VALUES(?)");
    prep.setString(1, id); // generate new id 
    prep.executeUpdate();

Actually I set 1 to my id but if I want to generate more INSERT INTO How can I INSERT INTO new value with new id ?

martin7887
  • 13
  • 3
  • Does this answer your question? [PostgreSQL Autoincrement](https://stackoverflow.com/questions/787722/postgresql-autoincrement) Or this? [Generate Auto ID in PostgreSQL](https://stackoverflow.com/questions/35763115/generate-auto-id-in-postgresql) – Nowhere Man Oct 08 '20 at 17:56
  • Related: [How to get the insert ID in JDBC?](https://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc) If you want to generate an id, you shouldn't specify it in the query. – Mark Rotteveel Oct 10 '20 at 13:59

1 Answers1

2

Use an identity column:

create table foo 
(
  id integer primary key generated always as identity, 
  some_column text, 
  ... 
)

Then use PreparedStatement.getGeneratedKeys()

int id = -1;
PreparedStatement prep = conn.prepareStatement("INSERT INTO TABLE (some_column) VALUES(?)", Statement.RETURN_GENERATED_KEYS);
prep.setString(1, "some value");
prep.executeUpdate();
ResultSet rs = prep.getGeneratedKeys();
if (rs.next()) {
  id = rs.getInt(1);
}