带有Sqlite的Android - 如何检查表是否存在以及是否为空

时间:2016-05-17 06:27:37

标签: android sqlite android-studio alert

如果表不存在或表内容为空,我想显示警告框。

要检查表格是否为空,请使用:

        cCheckDB = db.rawQuery("SELECT COUNT(*) FROM " + MainActivity.TABLE_NAME +"", null);

        if (cCheckDB != null) {
            cCheckDB.moveToFirst();

            if (cCheckDB.getInt (0) == 0) {
                // EMPTY
            }
        }

但是如何将此包装在"如果表存在"?什么是最好的方式?

我知道检查表是否存在或检查其中是否有内容的两种方法。但我想以有意义的方式使用支票而不是单一查询,如果可能的话 - 这是我的问题。

3 个答案:

答案 0 :(得分:4)

希望,这对你有所帮助。 它运作良好!!!

public boolean isTableExists(String tableName, boolean openDb) {
    if(openDb) {
        if(mDatabase == null || !mDatabase.isOpen()) {
            mDatabase = getReadableDatabase();
        }

        if(!mDatabase.isReadOnly()) {
            mDatabase.close();
            mDatabase = getReadableDatabase();
        }
    }

    Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
    if(cursor!=null) {
        if(cursor.getCount()>0) {
                            cursor.close();
            return true;
        }
                    cursor.close();
    }
    return false;
}

答案 1 :(得分:1)

要检查您的表是否存在,您可以使用:

<强> SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';

此处,将table_name替换为您要更改的表名

EX:

SELECT name FROM sqlite_master WHERE type='table' AND name='Employee_Details';

答案 2 :(得分:0)

更优化的方法是检查表是否存在然后检查记录是否存在

 private void clearTable(String tableName) {
        int count;
        Cursor cursor = db.rawQuery("SELECT count(*) FROM sqlite_master WHERE type='table' AND " +
                "name= " + tableName, null);
        cursor.moveToFirst();
        count = cursor.getInt(0);
        if (!cursor.isClosed())
            cursor.close();

        if (count > 0)//table exist now delete record if it exist
        {
            cursor=db.rawQuery("select exists(select 1 FROM " + tableName + ")", null);
            cursor.moveToFirst();
            count = cursor.getInt(0);
            if (!cursor.isClosed())
                cursor.close();
            if (count > 0)
                db.execSQL("delete from " + tableName);
        }
    }