HSQLDB getGeneratedKey() - Fehlermeldung

Supra

Bekanntes Mitglied
Moin,

ich habe folgendes Problem: Nachdem ich einen neuen Datensatz in eine Tabelle der Datenbank hinzugefügt habe würde ich gerne den dafür von der DB erstellen Schlüssel erfahren. Also habe ich folgendes gemacht:
Java:
public void insert(Spieltag spieltag) throws TurnierException
        {
                Connection con = DatenbankVerbindung.getInstance().stelleVerbindungHer();
                PreparedStatement preparedStatement = null;
                String query = "INSERT INTO SPIELTAG(bezeichnung,beginn,ende)VALUES(?,?,?)";
                try
                {
                        int zaehler = 1;
                        preparedStatement = con.prepareStatement(query);
                        preparedStatement.setString(zaehler++, spieltag.getSpieltagBezeichnung());
                        preparedStatement.setDate(zaehler++, getSqlDate(spieltag.getDatumStart()));
                        preparedStatement.setDate(zaehler++, getSqlDate(spieltag.getDatumEnde()));
                        preparedStatement.executeUpdate();

                        ResultSet rs = preparedStatement.getGeneratedKeys();
                        //if(rs.next())
                        rs.next();
//                        {
                                int key = rs.getInt(1);
                                spieltag.setId(key);
//                        }

                        insertReferenz(spieltag.getId(), spieltag.getSpiele(), con);

                } catch (SQLException e)
                {
                        e.printStackTrace();
                        throw new TurnierException(e.getMessage());
                } finally
                {
                        DatenbankVerbindung.getInstance().close(preparedStatement);
                        DatenbankVerbindung.getInstance().trenneVerbindung(con);
                }
        }

rausspringen tut er hier:
Java:
                        rs.next();
//                        {
                                int key = rs.getInt(1); // Hier
                                spieltag.setId(key);
//                        }
.
Meine Fehlermeldung:
Caused by: org.hsqldb.HsqlException: invalid cursor state: identifier cursor not positioned on row in UPDATE, DELETE, SET, or GET statement: ; ResultSet is empty!!!

Ich kriege es leider nicht selber gelöst hat jemand einen Ansatz oder Tip? Meine Alternative Lösung wäre mit nextVal() vorher den nächsten key rauszukriegen, was ich allerdings nicht so schön finde. Und ich der Meinung bin, dass getGeneratedKey() funktionieren sollte.

Gruß

Supra
 
Hallo VFL freak,

ich glaube wir stehen an der gleichen StellexD.
Eingefügt worden ist ja, aber das Resultset ist leer...

Irgendwie habe ich null Ahnung woher das kommt.
Gruß
 
probier mal
Java:
preparedStatement = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
 
Hallo Deros,

anscheinend hat diese Lösung funktioniert. Habe ich einfach Pech gehabt das es in meinen Fall nicht funktioniert und ich muss deine Lösung nehmen? Oder habe ich mich geirrt und ich habe das so noch nicht verwendet und meine Lösung war noch nicht 100% richtig?

Mit freundlichen Grüßen

Supra
 
Zuletzt bearbeitet:
Kein Plan ob du soetwas schonmal benutzt hast, du musst aber in diesem Falle ja schon der DB sagen, was du zurück haben möchtest. Ob das so klappz ist aber leider sehr stark von der eingesetzten DB abhängig.
 
Hmm das klingt Einleuchtend, ich hätte gedacht das getGeneratedtKeys() regelt dies von alleine.
Jetzt funktioniert es ja.
 

Zurück
Oben