java - 自动增量问题-向数据库添加条目并同时显示它们的最佳方式

标签 java database sqlite odbc auto-increment

我使用 SQLite 数据库和 Java GUI。在 GUI 上输入的信息将添加到数据库的表中。该表包含自动增量。同时我想在 GUI 上显示信息并稍后更改它。

创建数据库:

stat.executeUpdate("create table t1(ROWID INTEGER PRIMARY KEY AUTOINCREMENT, Value);";

向数据库添加值:

Statement stat = con.createStatement();
String sql = "insert into t1 values ($next_id,'"+value+');";
stat.executeUpdate(sql);

如何将 ID 保存在程序中,使其与数据库中的 ID 相同,并且可以轻松访问数据库?

编辑: 我尝试了评论中提到的解决方案并遇到了 NYI 异常...

String sql = "insert into t1 values($next_id,'"+value+"');";
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet res = stmt.getGeneratedKeys();
while (res.next()){
     int id = res.getInt(1);
     System.out.println(id);
}
con.commit();

还尝试了Russel的解决方案,并得到了另一个异常(“未由SQLite JDBC驱动程序实现”):

String sql = "insert into t1 values($next_id,'"+value+"');";
Statement stat = con.createStatement();
stat.executeUpdate(sql);
stat.executeUpdate("SELECT LAST_INSERT_ROWID() from t1;", Statement.RETURN_GENERATED_KEYS);
ResultSet res = stat.getGeneratedKeys();
while (res.next()){
    int id = res.getInt(1);
    System.out.println(id);
}

我做错了什么?

最佳答案

直接调用SELECT LAST_INSERT_ID()怎么样?这将返回为您的连接生成的最后一个自动增量值(不受其他客户端操作的影响)。

或者,查看 Javadoc,您似乎应该能够使用普通的 Statement 来完成此操作:

stat.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet keys = stat.getGeneratedKeys();

关于java - 自动增量问题-向数据库添加条目并同时显示它们的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796446/

相关文章:

java - GUI 按钮的延迟

java - 无法在 Octave 中使用 Java

java - BufferedImage.getRGB(int, int, int, int, int[], int, int) 如何工作?

mysql - 如何设计这种多对多的数据库?

sql - 如何在现有表上设计这些查询

javascript - 使用 Node.js 使用数据库值生成动态 word 文档

java - A* 搜索实现

java - 我是否必须为 Cassandra 中的每次写入打开一个新的数据库连接?

mysql - LEFT JOIN 优化

sqlite - 一般错误 : 1 cannot rollback - no transaction is active cakephp?