2017-02-07 2 views
1

В таблице доступа db у меня есть столбец cmt_data, который содержит строку. Например:Подстрока подстроки столбцов с Jackcess

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

У меня также есть List<String> такие вещи, как MRSS0319, TRPP3006 и т.д. То, что я ищу сделать, это выполнить подстроке между моим List<String> и столбца таблицы, но я не могу Понятно, как примеры с Jackcess довольно просты. В качестве примера я нашел here показывает:

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

Если метод cursor.currentRowMatches(columnPattern, valuePattern) выглядит как это может быть полезно. Однако, согласно документации, кажется, что метод выполняет только согласование равенства строк, поэтому теперь я как бы зашел в тупик.

Цените свою помощь.

+0

[Jackcess API Docs] (http://jackcess.sourceforge.net/apidocs/) –

ответ

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 для курсора, но это может быть слишком много.

+0

отличный ответ, но я ищу, чтобы написать изменения в Access, если была найдена подстрока. В этом случае мне нужно сделать 'cursor.updateCurrentRow (row)'? Я также отмечаю, что пример документации недостаточно для проекта Jackcess, который позволяет API вниз. Возможно, документацию по SO можно открыть в теге 'jackcess'? Ссылка [здесь] (http://stackoverflow.com/documentation/jackcess) –

+0

Да, вы можете использовать 'cursor.updateCurrentRow', или' table.updateRow', или, возможно, 'cursor.setCurrentRowValue', чтобы обновить только один столбец. Что касается документации, я бы оставил это для команды Jackcess, чтобы решить, хотят ли они поддерживать здесь документацию (вместо или в дополнение к [кулинарной книге] (http://jackcess.sourceforge.net/cookbook.html) , [Javadoc] (http://jackcess.sourceforge.net/apidocs/) и модульные тесты в исходном коде). –

+1

Я использую 'cursor.setCurrentRowValue (table.getColumn (" cmt_data "), newString), который, кажется, работает согласно требованиям. И, конечно, я столкнулся с тем, что было бы лучше, если бы было больше примеров сценариев использования и т. Д. Большое спасибо за вашу помощь. –

Смежные вопросы