Java Jackcess通过多个列查找行

时间:2014-08-05 11:00:36

标签: java sql database ms-access jackcess

我正在使用Jackcess Library访问Java上的MS Access数据库,我想知道如何通过多个列值查找表行。

到目前为止,每次我需要按行列值找到一行时,我都会遵循此过程:

Row row = CursorBuilder.findRow(table, Collections.singletonMap("a", "foo"));

if(row != null) {
   System.out.println("Found row where 'a' == 'foo': " + row);
} else {
   System.out.println("Could not find row where 'a' == 'foo'");
}

我在Jackcess网站上发现了这个,它的作用类似于“SELECT * FROM tablename WHERE a =”foo“。 我需要的是拥有多个“WHERE-Condition”。

从我在Jackcess上看到的文档中,FindRowByPrimaryKey或FindRowByEntry似乎做了我需要的东西,但我找到的例子只显示它使用了一个条件。

http://jackcess.sourceforge.net/apidocs/com/healthmarketscience/jackcess/IndexCursor.html#findRowByEntry%28java.lang.Object...%29

第二个参数叫做entryValues(复数),但我不知道如何使用它。

提前致谢

1 个答案:

答案 0 :(得分:3)

您可以通过为 entryValues 创建一个包含多个条目的Map来指定多个条件:

Database db = DatabaseBuilder.open(new File(
        "C:/Users/Gord/Desktop/Database1.accdb"));
Table table = db.getTable("People");
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.put("FirstName", "Jimmy");
criteria.put("LastName", "Hoffa");
Row row = CursorBuilder.findRow(table, criteria);
if (row == null) {
    System.out.println("No row found that matches all criteria.");
}
else {
    System.out.println(String.format("Row found: ID=%d.", row.get("ID")));
}

这将找到符合所有指定条件的行(如... WHERE FirstName='Jimmy' AND LastName='Hoffa'中所示)。要使用更复杂的搜索条件,您可以考虑使用UCanAccess(详情here)。