Postgre und Last insert id
Aus Infostudium Wiki
Das Einfügen eines Datensatzes in eine Tabelle, die eine serial-Spalte besitzt, erhöht die ID die Spalte automatisch. Ähnlich wie eine PrimaryKey-Spalte bei MySQL, die die Option autoincrement besitzt. So muss man sich nicht selbst um das Erhöhen der ID kümmern.
Fügt man nun einen Eintrag einer Tabelle hinzu, so wird die ID automatisch von der Datenbank vergeben. Das Problem ist nun, dass man die neue ID auch sofort von der Datenbank zurückbekommen sollte, um weiter mit ihr im Programm arbeiten zu können. So ist es möglich, direkt nach dem Anlegen eines Eintrags in der Tabelle persons, die ID der Person für neue Einträge in der Tabelle cdemails zu verwenden.
public void createPerson(Person person) throws StorageAccessException {
try {
String statement = "INSERT INTO persons (firstname,lastname,username,birthdate,passwdmd5) VALUES (?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(statement);
ps.setString(1, person.getFirstName());
ps.setString(2, person.getLastName());
ps.setString(3, person.getUserName());
ps.setDate(4, new java.sql.Date(person.getBirthDate().getTime()));
ps.setString(5, person.getPasswdMD5());
ps.execute();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT currval('persons_id_seq') AS lastinsertid;");
rs.next();
long id = rs.getLong("lastinsertid");
person.setPersonId(id);
} catch (Exception ex) {
throw new StorageAccessException(
"Ein Fehler beim Erstellen einer Person ist aufgetreten.",ex);
}
System.out.println("Die Person " + person.getUserName() + " wurde angelegt.");
}
Zurück zu Entwicklung eines Fußballtippportals