Android:检查sqlite表是否存在总是返回true

时间:2016-03-09 16:03:16

标签: android sqlite android-cursor

我有这个方法来检查该数据库中是否存在表。但是它总是返回true。

public boolean checkDomainTableExists(String domain){

        if (database==null||!database.isOpen()){
            database=dBHelper.getReadableDatabase();
        }
        if (!database.isReadOnly()){
            database.close();
            database=dBHelper.getReadableDatabase();
        }

        try{
            cursor=database.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});

        }catch (Exception e){
                Log.d("exception",e.getLocalizedMessage());
        }
        if (cursor!=null){
            if (cursor.getCount()>0){
                cursor.close();
                return true;
            }
            cursor.close();
        }

        return false;
    }

当我正在调试时,我看到cursor计数在到达if (cursor.getCount()>0){时为-1,当我跳过breakpoint时,光标数变为1导致方法返回true

无论我给出的是什么表名,这个方法总是返回true。

以下是调试控制台的屏幕截图: enter image description here

此时光标计数为-1,所以我认为它不应该进入循环,但是确实如此,计数变为1。

编辑:我也尝试了以下查询:

database.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '" + tableName + "'", null);

即使在这种情况下,getCount始终为1。

try{
        cursor=database.query(tableName,null,null,null,null,null,null);
        tableExists=true;
    }catch (Exception e){
            Log.d("exception",e.getLocalizedMessage());
    }

这里bool tableExists总是假的。

enter image description here

我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

SELECT COUNT(*)将始终返回一个条目。而不是查看getCount(),移至第0位并调用getInt(0)以检索SELECT COUNT(*)生成的值。在那里,你可能正在寻找0或1。