游标数为1,而表有3行

时间:2017-12-07 05:51:41

标签: android-sqlite

我正在尝试填充sql表,然后从中检索数据。以下是我的代码。

editor.putLong("spinTimer", spinTimer);
editor.commit();

我的表中有4行数据,我可以看到print语句“在数据库中添加”

但是当我实际读取它时,光标只读取第1行并移出while循环。什么可能是错的。

TIA

2 个答案:

答案 0 :(得分:1)

除了在循环中放置drop命令外,您的代码绝对正常。如前面的评论中所述,请确保每次都避免调用drop查询,并且您将找到结果。

答案 1 :(得分:1)

正如Santosh指出删除表(按照db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST1);)然后重新创建它(根据onCreate(db);)将删除表,然后重新创建表删除任何行/先前已添加到表中的数据。

因此,这只是删除这两行代码的问题,而且似乎没有必要使用行int id = 1;,所以也许删除它,按照: -

public void addQuestion(Question quest)
{
    ContentValues values = new ContentValues();
    SQLiteDatabase db = this.getWritableDatabase();
    values.put(KEY_QUES, quest.getQuestion());
    values.put(KEY_ANSWER, quest.getAnswer());
    values.put(KEY_OPTA, quest.getOptA());
    values.put(KEY_OPTB, quest.getOptB());
    values.put(KEY_OPTC, quest.getOptC());
    db.insert(TABLE_QUEST1, null, values);
    System.out.println("Added in database: " + quest.getQuestion());
}

P.S。您可以考虑不使用硬编码列偏移,而是使用getColumnIndex(column_name) Cursor方法根据列名获取偏移量。例如: -

        Question quest = new Question();
        quest.setID(cursor.getInt(cursor.getColumnIndex("name_of_your_id_columm")));
        quest.setQuestion(cursor.getString(cursor.getColumnIndex(KEY_QUES)));
        quest.setAnswer(cursor.getString(cursor.getColumnIndex(KEY_ANSWER)));
        quest.setOptA(cursor.getString(cursor.getColumnIndex(KEY_OPTA)));
        quest.setOptB(cursor.getString(cursor.getColumnIndex(KEY_OPTB)));
        quest.setOptC(cursor.getString(cursor.getColumnIndex(KEY_OPTC)));
        quesList.add(quest);

注意到"name_of_your_id_columm"代替KEY_ID,你可能会定义$ udevadm monitor --environment --udev ,如果是这样的话,那么你有一个单一的定义,这样可以减少无意中错误填写列名或错误计算偏移量的可能性