2016-04-25 9 views
0

Warum kann Cursor nicht verwendet werden, wenn ich versuche, Jackcess zu verwenden, um die Zeile zu finden, die ich löschen muss, um eine Tabelle zu löschen?Kann Tabelle über Jackcess nicht mit getSystemTable und findFirstRow löschen

private static void deleteTable(Database db, String tableName) throws IOException { 
    Table table = db.getSystemTable(tableName); 
    if (table == null) { 
     return; 
    } 
    Cursor cursor = table.getDefaultCursor(); 
    Map<String, Object> criteria = new HashMap<String, Object>(); 
    criteria.put("Name", tableName); 
    criteria.put("Type", (short) 1); 
    if (cursor.findFirstRow(criteria)) { 
     table.deleteRow(cursor.getCurrentRow()); 
     Log.e(TAG, "delete " + tableName + " success!"); 
    } else { 
     Log.e(TAG, "can't find this Table");//run here 
    } 
    db.flush(); 
    db.close(); 
} 

P. S .: keine gemeldet Ausnahme

+0

Ein Titel kurz und bündig das Problem beschreiben sollte zu verwenden; Verwenden Sie den Hauptteil der Frage, um das Problem genauer zu erklären. Wenn das bedeutet, den Titel im Körper zu wiederholen, wiederholen Sie den Titel. Fragen mit nur Code im Körper sind in der Regel von geringer Qualität. –

Antwort

0

Ihr Fehler besteht darin, dass Sie die Tabelle, die Sie löschen möchten, öffnen, nicht die Systemtabelle, die eine Liste von Datenbankobjekten hält. Statt

Table table = db.getSystemTable(tableName); 

benötigen Sie

Table table = db.getSystemTable("MSysObjects"); 
+0

danke für die Antwort. – jelen