如何在SQLite3和Java中找到下一个要使用的id?
我目前正在使用Java和JDBC来处理SQLite。在将新对象插入数据库时,我如何知道使用哪个id或如何生成它 以下是我正在使用的代码:如何在SQLite3和Java中找到下一个要使用的id?,java,jdbc,sqlite,Java,Jdbc,Sqlite,我目前正在使用Java和JDBC来处理SQLite。在将新对象插入数据库时,我如何知道使用哪个id或如何生成它 以下是我正在使用的代码: private void insertIntoTable() { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jd
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插入数据库?INTEGER主键列将自动作为自动递增列,q.v。只需为ID列插入NULL值,SQLite就会为您填充该值。也就是说,使用以下代码:
String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (null, 'Brian Brianson', 32, 'California', 60000.00);";
stmt.executeUpdate(sql);
整型主键列将自动作为自动增量列,q.v。只需为ID列插入NULL值,SQLite就会为您填充该值。也就是说,使用以下代码:
String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (null, 'Brian Brianson', 32, 'California', 60000.00);";
stmt.executeUpdate(sql);
唯一的问题是,看看SQLite文档,它是这样说的:AUTOINCREMENT关键字会带来额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不是严格需要的话,应该避免使用。它通常是不需要的。我应该担心吗?@SirGoose如果有自动递增列可以让你的逻辑/生活更轻松,那就不必担心了。该功能存在是有原因的,如果您需要它,请使用它。@SirGoose-请重新阅读。如果您的ID列被定义为INTEGER主键,那么如果您向它传递NULL,SQLite将自动分配一个值,或者更好的做法是,从INSERT语句中省略该列。您引用的注释是关于可选的AUTOINCREMENT关键字的,该关键字指定了在自动指定ROWID值时使用的稍微不同的算法。蒂姆:您可能需要编辑您的答案,以澄清整数主键列将用作标识ROWID列,而不使用自动递增。@GordThompson谢谢您的说明。我对另一个问题有了正确的答案,但现在我已经更新了。唯一的问题是,查看SQLite文档,它说:AUTOINCREMENT关键字会带来额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不是严格需要的话,应该避免。它通常是不需要的。我应该担心吗?@SirGoose如果有自动递增列可以让你的逻辑/生活更轻松,那就不必担心了。该功能存在是有原因的,如果您需要它,请使用它。@SirGoose-请重新阅读。如果您的ID列被定义为INTEGER主键,那么如果您向它传递NULL,SQLite将自动分配一个值,或者更好的做法是,从INSERT语句中省略该列。您引用的注释是关于可选的AUTOINCREMENT关键字的,该关键字指定了在自动指定ROWID值时使用的稍微不同的算法。蒂姆:您可能需要编辑您的答案,以澄清整数主键列将用作标识ROWID列,而不使用自动递增。@GordThompson谢谢您的说明。我对另一个问题有正确的答案,但我现在已经更新了。