非工作查询

时间:2017-10-21 10:28:37

标签: android sqlite android-sqlite

我在android studio中使用SQLite数据库。我的onCreate代码:

   @Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_MOODS_TABLE = "CREATE TABLE " + TABLE_NAME_MOODS + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_MOODS + " TEXT NOT NULL)";
    db.execSQL(CREATE_MOODS_TABLE);
}

和我的查询:

@Override
public Uri insert(@NonNull Uri uri,  ContentValues values) {

    final SQLiteDatabase db = mMindsDbHelper.getWritableDatabase();
    final SQLiteDatabase db2 = mMindsDbHelper.getReadableDatabase();
    long id = db.insert(TABLE_NAME_MOODS, null, values);
    String query = "SELECT * FROM "+ TABLE_NAME_MOODS;
    Cursor returnCursor;
    returnCursor = db2.rawQuery(query, null);
    return null;
}

出于调试目的,我在这个地方添加了选择查询。 当调试器点击这些点时,db.insert的返回id返回一些值(即新插入值的id)。但是select查询不返回任何有用的东西(它将mCount返回为-1)。 我也尝试过查询,但结果是一样的。

  returnCursor = db.query(TABLE_NAME_MOODS,
                    projection,
                    selection,
                    selectionArgs,
                    null,
                    null,
                    sortOrder);

问题出在哪里。

1 个答案:

答案 0 :(得分:1)

  

但是select select不会返回任何有用的东西(它将mCount返回为-1)

rawQuery()编译查询但不执行它。因此,对于尚未执行的查询,计数为-1。这同样适用于query(),因为它基本上只是rawQuery()的包装器。执行并匹配没有记录的查询将其计数设置为0。

要实际执行使用rawQuery()编译的查询的至少一个步骤,您需要在返回的moveTo...()上调用其中一个Cursor方法。例如,moveToFirst()