2014-06-09 3 views
2

Jackcess 사용하기 2.0.4 테이블을 쿼리하고 특정 조건과 일치하는 모든 행을 가져 오려고합니다.Jackcess를 사용하여 Java에서 조건에 대한 결과 세트 반복하기

Map<String, String> testData = new Hashtable<String, String>(); 

Database db = DatabaseBuilder.open(new File("DB.mdb")); 
Table table = db.getTable("db_data"); 

Cursor cursor = CursorBuilder.createCursor(table); 

while (cursor.findNextRow(Collections.singletonMap("case", case))) { 
    Row row = cursor.getCurrentRow(); 

    testData.put(row.get("Key").toString(), row.get("Data").toString()); 
} 

testData의 값은 행이 반환되지 않으므로 항상 null입니다. 내가 여기서 무엇을 놓치고 있는지 잘 모르겠습니다.

나는 아래의 방법을 사용해 보았습니다. 여전히 동일합니다.

for (Row row : cursor.newIterable().addMatchPattern("TestCaseId", testCaseId)) { 
    testData.put(row.get("Key").toString(), row.get("Data").toString()); 
} 

답변

0

코드를 점검하여 열 이름과 유형이 테이블의 것과 정확하게 일치하는지 확인하십시오.

Key: key3, Data: data3 
Key: key1, Data: data1 
[db_data]라는 테이블 ...

RowId TestCaseId Key Data 
----- ---------- ---- ----- 
    1   1 key1 data1 
    2   2 key2 data2 
    3   1 key3 data3 

... 다음 코드 샘플 데이터 ...

Map<String, String> testData = new Hashtable<String, String>(); 

String dbFile = "C:/Users/Public/test/DB.mdb"; 
try (Database db = DatabaseBuilder.open(new File(dbFile))) { 
    Table table = db.getTable("db_data"); 
    Cursor cursor = CursorBuilder.createCursor(table); 
    int testCaseId = 1; 
    for (Row row : cursor.newIterable().addMatchPattern("TestCaseId", testCaseId)) { 
     testData.put(row.get("Key").toString(), row.get("Data").toString()); 
    } 

    Iterator<Map.Entry<String, String>> it = testData.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry<String, String> entry = it.next(); 
     System.out.println(String.format(
       "Key: %s, Data: %s", 
       entry.getKey(), 
       entry.getValue())); 
    } 
} catch (Exception e) { 
    e.printStackTrace(System.out); 
} 

를 들어 ... 저 다음 콘솔 출력을 준다

+0

당신이 옳았습니다. 테이블 열 유형은 숫자 였지만 값을 문자열로 전달했습니다. 변수 유형을 변경 한 후 작동했습니다. 감사. – Purus