2014-06-10 78 views
4

我正嘗試使用Java中的Jackcess更新具有特定值的行。我正在使用下面的代碼,並且沒有對行進行更改。使用Jackcess更新Java中的行

我在這裏失蹤了什麼?由於沒有這些方法的文檔,我感覺很失落。

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

Cursor cursor = CursorBuilder.createCursor(table); 

Map<String, Object> map = new HashMap<String, Object>(); 

map.put("Active", true); // Value to be updated 

for (Row row : cursor.newIterable().addMatchPattern("testnum", testNum)) { 
    cursor.updateCurrentRow(table.asUpdateRow(map)); 
} 

db.flush(); 
db.close(); 
+1

你有沒有考慮過使用[UCanAccess](http://ucanaccess.sourceforge.net/site.html)?有關更多信息,請參閱此處的問題(http://stackoverflow.com/q/21955256/2144390)。 –

+0

是的。幾個月前,你提出這個問題是我的一個問題。但不幸的是,由於某些政策,UcanAccess無法在我的環境中使用。 – Purus

回答

1

下面的代碼對我的作品:

String dbFile = "C:/Users/Public/test/DB.mdb"; 
try (Database db = DatabaseBuilder.open(new File(dbFile))) { 
    Table table = db.getTable("Table1"); 
    Cursor cursor = CursorBuilder.createCursor(table); 
    int testNum = 1; 
    for (Row row : cursor.newIterable().addMatchPattern("testnum", testNum)) { 
     row.put("active", true); 
     table.updateRow(row); 
    } 
} catch (Exception e) { 
    e.printStackTrace(System.out); 
} 

注意與Jackcess工作時,列名稱是區分大小寫的。上面的代碼正在更新一個名爲active列,因此

row.put("active", true); 
table.updateRow(row); 

作品,但

row.put("Active", true); 
table.updateRow(row); 

將無法​​正常工作。

+0

這起作用。我覺得所有這些重要的操作都應該在官方頁面上記錄下來。非常感謝。 – Purus

+0

感謝您的提示。我只是注意到了它。 – Purus