2016-08-16 3 views
1

私は現在SQLiteで動作するためにJavaとJDBCを使用しています。新しいオブジェクトをデータベースに挿入する際に、どのIDを使用するのか、どのように生成するのかを知るはずです。SQLite3とJavaで次にどのIDを使用するのか?

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

を、私はどのように私は、データベースに挿入するために使用すべきIDを知る必要があり、新しいアイテムを挿入していた場合:ここで

は、私が使用している私のコードですか?

答えて

4

INTEGER PRIMARY KEYの列は自動的に自動インクリメント列として動作します。 documentation。 ID列にはNULLの値を挿入するだけで、SQLiteが値を入力します。つまり、このコードを使用し、次のとおりです。「AUTOINCREMENTキーワードは余分なCPU、メモリ、ディスク容量、およびディスクI/Oのオーバーヘッドを課し、避けるべきである。

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

唯一の問題は、SQLiteのドキュメントを見て、それがこれを言うということです厳密には必要ない場合は、通常は必要ありません。私はそれについて心配すべきでしょうか? – SirGoose

+1

@SirGoose自動増分列を使用すると、ロジック/ライフが容易になります。あなたがそれを必要とするならば、それは理由のために存在します。 –

+1

@SirGoose - [そのページ](https://www.sqlite.org/autoinc.html)をもう一度読んでください。 "ID"カラムが 'INTEGER PRIMARY KEY'として定義されている場合、NULLを渡すとSQLiteは自動的に値を代入します(INSERT文からそのカラムを単純に省略することをお勧めします)。あなたが引用した注釈は、特にROWID値を自動的に割り当てるときに使用するわずかに異なるアルゴリズムを指定するオプションの 'AUTOINCREMENT'キーワードに関するものです。 (Tim:「INTEGER PRIMARY KEY」列が「AUTOINCREMENT」なしでID(ROWID)列として機能することを明確にするために回答を編集することができます) –

関連する問題