列数据子串与Jackcess匹配

时间:2017-02-07 10:58:26

标签: java jackcess

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

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

我还有一个List<String>,其中包含MRSS0319TRPP3006等项目。我要做的是在List<String>Column col = table.getColumn("town"); cursor.beforeFirst(); while(cursor.moveToNextRow()) { if(cursor.currentRowMatches(columnPattern, valuePattern)) { // handle matching row here } } 之间执行子字符串匹配。表格列,但我不清楚如何提供Jackcess的例子相当简单。我发现here的一个例子显示:

cursor.currentRowMatches(columnPattern, valuePattern)

方法SELECT DISTINCT [APP_Computer_User_Id], [APP_Role_Name], [APP_Permission_Name] FROM [ADMINS].[APP_USER] U INNER JOIN [ADMINS].[APP_USER_ROLE] UR ON U.[APP_User_Id]=UR.[APP_User_Id] INNER JOIN [ADMINS].[APP_ROLE] URO ON UR.[APP_Role_ID]=URO.[APP_Role_ID] INNER JOIN [ADMINS].[APP_ROLE_PERMISSION] RP ON RP.[APP_Role_ID]=UR.[APP_Role_ID] INNER JOIN [ADMINS].[APP_PERMISSION] P ON RP.[APP_Permission_Id]=P.[APP_Permission_Id] 看起来很有用。但是根据文档,似乎该方法只执行字符串相等匹配,所以现在我处于死胡同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

当然,您可以创建一个小方法来检查匹配的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,但这可能有点过分。