Невозможно удалить таблицу через Jackcess, используя getSystemTable и findFirstRow

Почему курсор findFirstRow не может найти строку, которую нужно удалить, чтобы удалить таблицу с помощью Jackcess?

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.: исключений нет


person jelen    schedule 25.04.2016    source источник
comment
Название должно кратко описывать проблему; используйте тело вопроса, чтобы объяснить проблему более подробно. Если это означает повторение заголовка в теле, повторите заголовок. Вопросы, содержащие только код в теле, обычно имеют низкое качество.   -  person Mark Rotteveel    schedule 25.04.2016


Ответы (1)


Ваша ошибка в том, что вы открываете таблицу, которую хотите удалить, а не системную таблицу, содержащую список объектов базы данных. Вместо

Table table = db.getSystemTable(tableName);

вам нужно использовать

Table table = db.getSystemTable("MSysObjects");
person Gord Thompson    schedule 25.04.2016