2

使用 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());
}
4

1 回答 1

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
于 2014-06-09T19:42:53.743 回答