使用Jackcess在Java中更新行

4

我在使用Java中的Jackcess更新特定值的行。我正在使用以下代码,但是行没有发生任何更改。

我缺少什么?由于这些方法没有文档,所以我感到很困惑。

Database db = DatabaseBuilder.open(new File("Db.mdb"));
Table table = db.getTable("Table1");

Cursor cursor = CursorBuilder.createCursor(table);

Map<String, Object> map = new HashMap<String, Object>();

map.put("Active", true); // Value to be updated

for (Row row : cursor.newIterable().addMatchPattern("testnum", testNum)) { 
     cursor.updateCurrentRow(table.asUpdateRow(map));
}

db.flush();
db.close();

1
你考虑过使用UCanAccess吗?更多信息请参见这里的问题。 - Gord Thompson
是的。几个月前,您建议我在一个问题中使用它。但不幸的是,由于某些政策,我无法在我的环境中使用UcanAccess。 - Purus
1个回答

1
以下代码对我有效:

String dbFile = "C:/Users/Public/test/DB.mdb";
try (Database db = DatabaseBuilder.open(new File(dbFile))) {
    Table table = db.getTable("Table1");
    Cursor cursor = CursorBuilder.createCursor(table);
    int testNum = 1;
    for (Row row : cursor.newIterable().addMatchPattern("testnum", testNum)) {
        row.put("active", true);
        table.updateRow(row);
    }
} catch (Exception e) {
    e.printStackTrace(System.out);
}

请注意,在使用Jackcess时,列名是区分大小写的。上面的代码正在更新名为active的列,因此。
row.put("active", true);
table.updateRow(row);

工作正常,但是

row.put("Active", true);
table.updateRow(row);

不会起作用。


这个可行。我觉得所有这些重要的操作都应该在官方页面上有所记录。非常感谢。 - Purus
谢谢你的提示。我刚刚注意到了。 - Purus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接