0

这是活动中的代码:

//query
final dbhelper helper = new dbhelper(this);
Cursor c = helper.query();
boolean exist =false;
if(c != null && c.moveToFirst()){
Log.d("atestdbChar1no",String.valueOf(c.getCount()));   
int i=0;
while(c.isAfterLast()){
Log.d("atestdb1",String.valueOf(i++));
Log.d("atestdb2",String.valueOf(c.getInt(0)));
Log.d("atestdb3",c.getString(1));
Log.d("atestdb4",c.getString(2));
c.moveToNext(); 
}

//insert
      ContentValues values = new ContentValues();
      if(!finWords.equals("null")){
      if(finWords.length()>index){
      String selectWord = finWords.substring(index, index+1);
       values.put("character", finChar);
      values.put("word", selectWord);
      helper.insert(values);

这是 SQLiteOpenHelper 中的代码:

public void insert(ContentValues values) {
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TBL_NAME, null, values);
    Log.d("test", "dbinsert");
    db.close();
}

public Cursor query() {
    SQLiteDatabase db = getWritableDatabase();
    Cursor c = db.query(TBL_NAME, null, null, null, null, null, null);
    Log.d("test", "dbquery");
    return c;
}

我可以将数据插入数据库,但我无法查询它们 logcat 说游标索引超出范围并仅输出一些数据,例如仅输出 id 1,2,4,7 然后强制关闭应用程序但我已经插入 14 个数据什么我的代码错了吗?

4

1 回答 1

1

您忘记否定 c.isAfterlast() 并且除非您将 null 传回,否则您不必检查 null 游标。

if(c.moveToFirst()){
Log.d("atestdbChar1no",String.valueOf(c.getCount()));   
int i=0;
while(!c.isAfterLast()){
Log.d("atestdb1",String.valueOf(i++));
Log.d("atestdb2",String.valueOf(c.getInt(0)));
Log.d("atestdb3",c.getString(1));
Log.d("atestdb4",c.getString(2));
c.moveToNext(); 
}
于 2013-04-15T05:24:03.320 回答