2016-08-16 3 views
1

Ich verwende derzeit Java und JDBC, um mit SQLite zu arbeiten. Wie soll ich beim Einfügen eines neuen Objekts in eine Datenbank wissen, welche ID verwendet oder wie generiert werden soll?Wie finde ich die nächste ID in SQLite3 und Java?

Hier ist mein Code Ich verwende:

private void insertIntoTable() { 
    Connection c = null; 
    Statement stmt = null; 

    try { 
     Class.forName("org.sqlite.JDBC"); 
     c = DriverManager.getConnection("jdbc:sqlite:src/test.db"); 
     c.setAutoCommit(false); 
     System.out.println("Opened database successfully"); 

     stmt = c.createStatement(); 
     String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + 
       "VALUES (2 , 'Brian Brianson', 32, 'California', 60000.00);"; 
     stmt.executeUpdate(sql); 

     stmt.close(); 
     c.commit(); 
     c.close(); 
    } catch (Exception e) { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
} 

Wenn ich das Einfügen neuer Elemente, wie soll ich die ID herauszufinden, ich sollte in die Datenbank einzufügen verwenden?

Antwort

4

INTEGER PRIMARY KEY Spalten verhalten sich automatisch wie automatische Inkrementspalten, q.v. die documentation. Sie müssen nur NULL Werte für die ID-Spalte einfügen und SQLite wird den Wert für Sie auffüllen. Das heißt, verwenden Sie diesen Code:

String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + 
      "VALUES (null, 'Brian Brianson', 32, 'California', 60000.00);"; 
stmt.executeUpdate(sql); 
+0

Einziges Problem ist, dass in der SQLite-Dokumentation suchen, heißt es: „Der Schlüsselwort AUTOINCREMENT erlegt zusätzliche CPU, Arbeitsspeicher, Festplattenspeicher und Platten-I/O-Overhead und sollte vermieden werden wenn es nicht unbedingt benötigt wird. Es wird normalerweise nicht benötigt. " Sollte ich darüber besorgt sein? – SirGoose

+1

@SirGoose Nicht, wenn die automatische Inkrement-Spalte die Logik/das Leben einfacher macht. Die Funktion ist aus einem bestimmten Grund da, wenn Sie es brauchen, dann benutzen Sie es. –

+1

@SirGoose - Lesen Sie [diese Seite] (https://www.sqlite.org/autoinc.html) erneut. Wenn Ihre Spalte "ID" als "INTEGER PRIMARY KEY" definiert ist, wird SQLite automatisch einen Wert zuweisen, wenn Sie ihm einen NULL übergeben (oder, besser noch, lassen Sie diese Spalte einfach aus der INSERT-Anweisung aus). Die von Ihnen zitierte Anmerkung bezieht sich speziell auf das optionale Schlüsselwort 'AUTOINCREMENT', das einen etwas anderen Algorithmus für die automatische Zuweisung des ROWID-Werts angibt. (Tim: Vielleicht möchten Sie Ihre Antwort bearbeiten, um zu verdeutlichen, dass eine Spalte "INTEGER PRIMARY KEY" als Identitätsspalte (ROWID) ohne "AUTOINCREMENT" dient. –

Verwandte Themen