2

在我的 Access db 表中,我有一cmt_data列包含一个字符串。例如:

Check in the packet TM(12,9) MRSS0319 'Monitoring List Report'.

我也有List<String>诸如 , 等的项目MRSS0319TRPP3006我要做的是在 myList<String>和 table 列之间执行子字符串匹配,但我不太清楚 Jackcess 提供的示例是如何简单的。我在这里找到的一个例子显示:

Column col = table.getColumn("town");
cursor.beforeFirst();
while(cursor.moveToNextRow()) {
  if(cursor.currentRowMatches(columnPattern, valuePattern)) {
    // handle matching row here
  }
}

该方法cursor.currentRowMatches(columnPattern, valuePattern)看起来可能有用的地方。但是根据文档,该方法似乎只执行字符串相等匹配,所以现在我有点走投无路了。

感谢你的帮助。

4

1 回答 1

3

当然,您可以创建一个小方法来检查cmt_data匹配的值:

public static void main(String[] args) {
    String dbPath = "C:/Users/Public/JackcessTest.accdb";
    try (Database db = DatabaseBuilder.open(new File(dbPath))) {
        Table table = db.getTable("cmt_table");
        Cursor cursor = table.getDefaultCursor();
        cursor.beforeFirst();
        while (cursor.moveToNextRow()) {
            Row row = cursor.getCurrentRow();
            if (stringContainsSpecialValue(row.getString("cmt_data"))) {
                // handle matching row here
                System.out.println(row);
            }
        }
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}

private static boolean stringContainsSpecialValue(String str) {
    boolean rtn = false;
    List<String> specialValues = Arrays.asList("MRSS0319", "TRPP3006");
    for (String val : specialValues) {
        if (str.contains(val)) {
            rtn = true;
            break;
        }
    }
    return rtn;
}

您可能还可以为您的光标创建一个自定义ColumnMatcher,但这可能是矫枉过正。

于 2017-02-07T13:40:05.197 回答