使用Jackcess在Java中循环条件的结果集

时间:2014-06-09 13:38:02

标签: java jackcess

使用Jackcess 2.0.4我试图查询表并获得符合特定条件的所有行。

Map<String, String> testData = new Hashtable<String, String>();

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

Cursor cursor = CursorBuilder.createCursor(table);

while (cursor.findNextRow(Collections.singletonMap("case", case))) {
    Row row = cursor.getCurrentRow();

    testData.put(row.get("Key").toString(), row.get("Data").toString());
}

testData的值始终为null,因为不返回任何行。我不确定我在这里缺少什么。

我甚至尝试过以下方法。它仍然是一样的。

for (Row row : cursor.newIterable().addMatchPattern("TestCaseId", testCaseId)) {
    testData.put(row.get("Key").toString(), row.get("Data").toString());
}

1 个答案:

答案 0 :(得分:0)

检查代码以确保列名称和类型与表中的列名称和类型完全匹配。对于名为[db_data] ...

的表中的示例数据
RowId  TestCaseId  Key   Data
-----  ----------  ----  -----
    1           1  key1  data1
    2           2  key2  data2
    3           1  key3  data3

......以下代码......

Map<String, String> testData = new Hashtable<String, String>();

String dbFile = "C:/Users/Public/test/DB.mdb";
try (Database db = DatabaseBuilder.open(new File(dbFile))) {
    Table table = db.getTable("db_data");
    Cursor cursor = CursorBuilder.createCursor(table);
    int testCaseId = 1;
    for (Row row : cursor.newIterable().addMatchPattern("TestCaseId", testCaseId)) {
        testData.put(row.get("Key").toString(), row.get("Data").toString());
    }

    Iterator<Map.Entry<String, String>> it = testData.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<String, String> entry = it.next();
        System.out.println(String.format(
                "Key: %s, Data: %s", 
                entry.getKey(), 
                entry.getValue()));
    }
} catch (Exception e) {
    e.printStackTrace(System.out);
}

...给我以下控制台输出:

Key: key3, Data: data3
Key: key1, Data: data1