Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLite3和Java中找到下一个要使用的id?_Java_Jdbc_Sqlite - Fatal编程技术网

如何在SQLite3和Java中找到下一个要使用的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

我目前正在使用Java和JDBC来处理SQLite。在将新对象插入数据库时,我如何知道使用哪个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插入数据库?

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谢谢您的说明。我对另一个问题有正确的答案,但我现在已经更新了。