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