如何检查我的 sqlite 表中是否有数据?

2022-09-04 05:15:40

编辑,根据下面的答案稍微更改了代码,但仍然没有让它工作。我还添加了一条日志消息,告诉我getCount是否返回>0,确实如此,所以我假设我的查询可能有问题?或者我对光标的使用。

我已经创建了一个表,我想检查它是否为空,如果它是空的,我想运行一些插入语句(存储在数组中)。

以下是我的代码,虽然我没有错误,但当我拉出.db文件时,我可以看到它不起作用。你会如何处理这个问题?

public void onCreate(SQLiteDatabase db) {
        Log.i("DB onCreate", "Creating the database...");//log message
        db.execSQL(createCATBUDTAB);
        db.execSQL(createTWOWEETAB);
        try{
            Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
        if (cur.getCount() > 0){
            Log.i("DB getCount", " getcount greater than 0");//log message
            //do nothing everything's as it should be
        }
        else{//put in these insert statements contained in the array
            Log.i("DB getCount", " getcount less than 0, should read array");//log message
            for(int i=0; i<13; i++){
                db.execSQL(catInsertArray[i]);
            }
        }
        }catch(SQLiteException e){System.err.println("Exception @ rawQuery: " + e.getMessage());}
    }

抱歉,如果这是一个非常愚蠢的问题或方法,我是所有这些的新手。任何答案非常感谢!


答案 1

对现有表的查询不应返回 null。如果表中没有行,则应返回一行包含值零的行。SELECT COUNT(*)

相反,具有非零值的行表示它不是空的

在这两种情况下,都应返回一行,这意味着它将始终通过

//do nothing everything's as it should be

部分。

要修复它,请将查询保持原样(您不想这样做,因为这是不必要的,并且可能有点低效)。将其保留为 ,这将始终返回一行,并使用以下代码(仅在我的脑海中测试过,所以要小心):select column_nameselect count(*)

Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
if (cur != null) {
    cur.moveToFirst();                       // Always one row returned.
    if (cur.getInt (0) == 0) {               // Zero count means empty table.
        for (int i = 0; i < 13; i++) {
            db.execSQL (catInsertArray[i]);
        }
    }
}

答案 2

返回位于第一个条目之前的对象(在此处查看详细信息)将始终返回结果(考虑到表存在)rawQueryCursorSELECT COUNT(*)

所以我会这样做:

if (cur != null){
    cur.moveToFirst();
    if (cur.getInt(0) == 0) {
      // Empty 
    }

}

推荐