2012-02-18 47 views
1
  1. 如何從幫助jackcess刪除行表? 我嘗試如此,但它的壞:jackcess刪除行並設置自動增量列

    Table ptabl = db.getTable("person"); 
        int pcount = ptabl.getRowCount(); 
        for (int i = 0; i < pcount; i++) { 
         Map<String, Object> row2 = ptabl.getNextRow(); 
         if (row2.get("id") == Integer.valueOf(1)) { 
          ptabl.deleteCurrentRow(); 
         } 
        } 
    
  2. 如何組列「id」屬性爲自動增量?

    Table newTable = new TableBuilder("diagnosis"). addColumn(new ColumnBuilder("id") .setSQLType(Types.INTEGER) .toColumn()) .addColumn(new ColumnBuilder("name") .setSQLType(Types.VARCHAR) .toColumn()).toTable(db);

回答

3

如果你的ID列索引,則可以使用IndexCursor快速查找列:

IndexCursor cursor = new CursorBuilder(ptabl).setIndexByColumnNames("id").toIndexCursor(); 
if(cursor.findFirstRowByEntry(1)) { 
    cursor.deleteCurrentRow(); 
} 

如果你的id列沒有編入索引,你可以使用普通的光標,這樣更方便,但實際上沒有比你目前的代碼快(只是做一個表掃描):

Cursor cursor = new CursorBuilder(ptab1).toCursor(); 
Column idCol = ptab1.getColumn("id"); 
if(cursor.findFirstRow(idCol, 1)) { 
    cursor.deleteCurrentRow(); 
} 

和你自己的答案表明您已經想出如何使列自動遞增。

1

對於一套自動增量列:

Table newTable = new TableBuilder("diagnosis").addColumn(new ColumnBuilder("id").setAutoNumber(true).setSQLType(Types.INTEGER).toColumn()).addColumn(new ColumnBuilder("name").setSQLType(Types.VARCHAR).toColumn()).toTable(db);