我正在尝试填充sql表,然后从中检索数据。以下是我的代码。
editor.putLong("spinTimer", spinTimer);
editor.commit();
我的表中有4行数据,我可以看到print语句“在数据库中添加”
但是当我实际读取它时,光标只读取第1行并移出while循环。什么可能是错的。
TIA
答案 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
,如果是这样的话,那么你有一个单一的定义,这样可以减少无意中错误填写列名或错误计算偏移量的可能性