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

时间:2012-01-09 23:04:37

标签: 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);
}

我错了什么?

2 个答案:

答案 0 :(得分:0)

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

或者,看看Javadoc,看起来你应该能够用普通的Statement做到这一点:

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

答案 1 :(得分:0)

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

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