使用Jackcess

时间:2015-05-04 15:28:25

标签: java database rcp jackcess

我正在使用带有Access数据库的Jackcess API。我打开数据库并获得一个特定的表。如何从此表中获取与id列表匹配的数据(行)?

例如,获取表格中列出的所有行。

 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")
            }
        }

在这种特殊情况下,我想删除行。

2 个答案:

答案 0 :(得分:1)

Jackcess提供了非常有限的查询数据功能,因此最好的方法是使用迭代器(或流)来查看表。

for(Row r : myTable)
    ; // perform any filtering based on rows here

答案 1 :(得分: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);
}