Java jackAccess按多个列查找行

Java jackAccess按多个列查找行,java,sql,database,ms-access,jackcess,Java,Sql,Database,Ms Access,Jackcess,我正在使用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 {

我正在使用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*fromtablename WHERE a=“foo”。 我需要的是有不止一个“WHERE条件”

从我在JackAccess上阅读的文档来看,FindRowByPrimaryKey或FindRowByEntry似乎满足了我的需要,但我找到的示例仅显示了它在一种条件下工作

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


提前感谢

您可以通过创建一个包含多个条目的
映射来指定多个条件,如下所示:

Database db=DatabaseBuilder.open(新文件(
“C:/Users/Gord/Desktop/Database1.accdb”);
Table=db.getTable(“人”);
映射条件=新建HashMap();
标准。放置(“名字”、“吉米”);
标准。put(“姓氏”、“Hoffa”);
行=CursorBuilder.findRow(表,条件);
if(行==null){
System.out.println(“未找到与所有条件匹配的行”);
}
否则{
System.out.println(String.format(“找到的行:ID=%d.”,得到的行(“ID”)));
}

找到一个符合所有指定标准的行(如<代码>……,FixNeord=‘JimMy’和LaSTNED=’HOFA’< /代码>)。为了使用更复杂的搜索标准,您可以考虑使用(详细信息).

谢谢,这正是我所需要的。我确实尝试过使用UCanAccess,但我发现它的执行速度比常规jackess实现慢得多。至少对我来说是这样……再次感谢!一般来说,UCanAccess不应该有性能问题,特别是如果可以使用默认的内存工作模式的话(memory=true)。但是请注意,vm进程生命周期中第一次连接的时间实际上可能很慢(主要取决于数据库大小)。相反,查询时间应该很快。