如果你查看我底部的代码,我的数据库就会使用'使用'。如果它是1,则意味着它没有被使用,当它被使用时,它设置为将数字更新为0.但是当所有行都使用数字0时,我想更新使用再次从0到1。怎么做?我没有线索。尝试使用cd.getCount(),但没有工作,尝试其他一些东西,但再次无法设法让它工作。所以我问是否有人可以帮助我并告诉我将什么放入代码中。谢谢!
这是我得到的错误:
02-25 18:46:16.962:E / AndroidRuntime(9728):android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0
public void set(){
SQLiteDatabase db;
String vprasanje = "";
db=openOrCreateDatabase("baza.db",MODE_PRIVATE, null);
Cursor cd=db.rawQuery("SELECT * FROM vprasanja WHERE kategorija=" + kategorija4 + " AND used = 1 ORDER BY RANDOM() LIMIT 1", null);
cd.moveToFirst();
vprasanje = cd.getString(cd.getColumnIndex("text"));
//patch
String id2 = (cd.getString(cd.getColumnIndex("id")));
int idd2 = Integer.parseInt(id2);
db.execSQL("UPDATE vprasanja SET used=0 WHERE id =" + idd2 + ";");
beseda = (TextView) findViewById(R.id.textView3);
beseda.setText("");
beseda.setText(vprasanje);
db.close();
busy = 0;
}
答案 0 :(得分:4)
好的,所以代码中有一些东西需要修复。首先,您需要检查cursor.moveToFirst()是否确实发生过。如果数据库中没有记录,则无法尝试获取字符串。
然后第一件事:
if(cd.moveToFirst()){
vprasanje = cd.getString(cd.getColumnIndex("text"));
//patch
String id2 = (cd.getString(cd.getColumnIndex("id")));
int idd2 = Integer.parseInt(id2);
db.execSQL("UPDATE vprasanja SET used=0 WHERE id =" + idd2 + ";");
beseda = (TextView) findViewById(R.id.textView3);
beseda.setText("");
beseda.setText(vprasanje);
db.close();
busy = 0;
}
但是,只要您不将内容插入数据库,这将始终为false,因为数据库中永远不会有任何记录。您将要插入内容,以防您无法更新:
db.rawQuery("INSERT INTO .... SET ... VALUES ...");