我正在使用jackcess库访问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条件”。
从我在jackcess上读到的文档来看,findrowbyprimarykey或findrowbyentry似乎做了我需要的事情,但是我找到的示例只显示了它在一个条件下工作。
http://jackcess.sourceforge.net/apidocs/com/healthmarketscience/jackcess/IndexCursor.html#findRowByEntry%28java.lang.Object...%29
第二个参数称为entryvalues(复数),但我不知道如何使用它。
提前谢谢
最佳答案
可以通过为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)。关于java - Java Jackcess按多列查找行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25137180/