【问题标题】:Autoincrement issue - best way to add entries to the database and display them at the same time自动增量问题 - 将条目添加到数据库并同时显示它们的最佳方式
【发布时间】:2012-02-06 11:04:42
【问题描述】:

我使用 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 保存在我的程序中,以便它与数据库中的相同,并且我可以轻松访问我的数据库?

编辑: 我尝试了 cmets 中提到的解决方案并遇到了 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);
}

我做错了什么?

【问题讨论】:

标签: java database sqlite odbc auto-increment


【解决方案1】:

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

另外,查看 Javadoc,您似乎应该可以使用普通的 Statement 来做到这一点:

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

【讨论】:

  • 试过了,但遇到了“SQLite JDBC 驱动程序未实现”异常……我更新了我的问题。
  • 如果您使用“SELECT”调用执行此操作,则行 ID 作为查询的结果返回,而不是作为生成的键返回。应该保证该方法有效,因为就 JDBC 而言,它只是进行了普通查询并返回了普通结果。
【解决方案2】:

如果您不介意使用 ORM 库,请尝试 sormula。它将为您完成身份列的所有工作。所需要的只是要自动递增的 POJO 字段上的 @Column(identity=true) 注释。

org.sormula.tests.identity 包中的测试用例向您展示了如何操作。包括 Sqlite 测试设置和 sqlitejdbc-v056.jar jar。更改 build.properties 以运行 db.dir=sqlitejdbc。

【讨论】:

  • 感谢您的建议,但这对于一个功能来说似乎有点太多开销。
  • 如果您对所有数据库 i/o 使用了 sormula,我想一切都会变得更容易,包括自动增量。我同意在其他应用程序使用 JDBC 时使用 sormula 进行一次更新是不明智的。
猜你喜欢
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多