0

Access データベースで Jackcess API を使用しています。データベースを開き、特定のテーブルを取得します。ID のリストに一致するこのテーブルからデータ (行) を取得するにはどうすればよいですか?

たとえば、id が List にあるテーブルからすべての行を取得します。

 private List<Component> disabledComponentsIds;
 private Database db = null;

 db = Database.open(new File(target), false, false);

 Table table = db.getTable("t_object");
        Table packages = db.getTable("t_package");
        for(Map<String, Object> r : table){
            if(disabledComponentsIds.contains(r.get("ea_guid"))){
                r.get("package_id");
                //Delete row from t_package table where id  = r.get("package_id")
            }
        }

この特定のケースでは、行を削除したいと思います。

4

2 に答える 2

1

「t_object」という名前のテーブルがあるとします...

object_id  object_name
---------  -----------
        1  alpha      
        2  bravo      
        3  charlie    
        4  delta      
        5  echo       

...「object_id」が主キーの場合、次のように特定の行を削除できます。

// test data
ArrayList<Integer> enabledComponentsIds = new ArrayList<>();
enabledComponentsIds.add(2);
enabledComponentsIds.add(3);

String dbFileSpec = "C:/Users/Public/jackcessTest.mdb";
try (Database db = DatabaseBuilder.open(new File(dbFileSpec))) {
    Table t = db.getTable("t_object");
    for (int id : enabledComponentsIds) {
        Row r = CursorBuilder.findRowByPrimaryKey(t, id);
        if (r != null) {
            t.deleteRow(r);
        }
    }
} catch (Exception e) {
    e.printStackTrace(System.err);
}

これにより、「object_id」が 2 または 3 の行が削除されます。

編集:

列にインデックスが付けられていない場合は、各行を反復処理して (Kayaman が提案したように)、その列の値がリストに含まれているかどうかを確認する必要があります。

// test data
ArrayList<Integer> enabledComponentsIds = new ArrayList<>();
enabledComponentsIds.add(2);
enabledComponentsIds.add(3);

String dbFileSpec = "C:/Users/Public/jackcessTest.mdb";
try (Database db = DatabaseBuilder.open(new File(dbFileSpec))) {
    Table t = db.getTable("t_object");
    for (Row r : t) {
        if (enabledComponentsIds.contains(r.getInt("object_id"))) {
            t.deleteRow(r);
        }
    }
} catch (Exception e) {
    e.printStackTrace(System.err);
}
于 2015-05-05T09:34:17.907 に答える