在 Jackcess 中使用多列索引匹配第一列

using multicolumn index in Jackcess to match on first column

我使用 Jackcess 2.1.5 从 Access 2003 table 读取数据,在 colA 和 colB 上有一个多列索引。这在给定 colA and colB.

值的情况下工作正常

现在理论上这样的索引可用于获取与 colA only 的值匹配的所有行。但是如何用 Jackcess 做到这一点呢?我无法使用 newEntryIterableEntryIterableBuilder

让它工作
Table table = access.getTable("tbl");
Index index = table.getIndex("index"); //index spanning two columns
IndexCursor cursor = CursorBuilder.createCursor(index);
for (Row row : cursor.newEntryIterable(val)) { //error: missing argument
for (Row row : cursor.newEntryIterable(val, null)) { //returns rows where colB == null
    //some code
}

目前我有另一个仅涵盖 colA 的索引。这是唯一的解决方案吗?

我刚刚尝试了以下方法,它对我有用。对于名为 "People"

的 table
ID  FirstName  LastName
--  ---------  --------
 1  Gord       Thompson
 2  Jimmy      Hoffa   
 3  Jimmy      Buffett 
 4  Bob        Loblaw  

(FirstName, LastName) 上有一个名为 "FirstLast" 的索引,代码

Table tbl = db.getTable("People");
IndexCursor cur = CursorBuilder.createCursor(tbl.getIndex("FirstLast"));
Map<String, String> criteria = Collections.singletonMap("FirstName", "Jimmy");
boolean found = cur.findFirstRow(criteria);
if (found) {
    boolean nextRowExists = true;
    do {
        Row r = cur.getCurrentRow();
        System.out.println(r.getString("LastName"));
        nextRowExists = cur.moveToNextRow();
    } while (nextRowExists && cur.currentRowMatches(criteria));
} else {
    System.out.println("(No matches found.)");
}

印刷

Buffett
Hoffa

但是,随后对网络共享上的大文件进行的测试表明,与使用 .newEntryIterableFirstName 只有。如果性能很重要,那么您应该只为 colA.

保留该附加索引

我知道这有点晚了,但我想添加一个更新。从 2.1.7 版本开始,Jackcess 现在支持部分索引查找。因此,从最初的问题来看,这一行现在将用于查找与双列索引的第一列匹配的所有条目:

for (Row row : cursor.newEntryIterable(val)) {