第一种写法public Person Find(Integer i) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cs =db.rawQuery("select * from person where Id=?", new String[]{i.toString()});
int personId;
String personName;
int personAge; while(cs.moveToFirst()){
personId =cs.getInt(cs.getColumnIndex("Id"));
personName = cs.getString(cs.getColumnIndex("Name"));
personAge = cs.getInt(cs.getColumnIndex("Age"));
return new Person(personId,personName,personAge);

}

return null;
}第二种写法:
public Person Find(Integer i) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cs =db.rawQuery("select * from person where Id=?", new String[]{i.toString()});
int personId;
String personName;
int personAge;
Person person  = null;
while(cs.moveToFirst()){
personId =cs.getInt(cs.getColumnIndex("Id"));
personName = cs.getString(cs.getColumnIndex("Name"));
personAge = cs.getInt(cs.getColumnIndex("Age"));
person = new Person(personId,personName,personAge);
}
return person;

}那位大哥帮我看看这两种写法有什么不一样,为什么我用第一种写法就可以运行,用第二种写法会运行不了的!!!

解决方案 »

  1.   

        你使用第二种写法的时候,是不是发生ANR?
         你把while(cs.moveToFirst()) 改成 if(cs.moveToFirst()),那么无论你使用哪种方法都没有问题了。
          出错的原因是:只要cursor中有数据,那么cs.moveToFirst()就一直返回true,所以第二种方法上,你就死循环了。
      

  2.   

    顺便提下,正常的写法应该是这样
        Cursor cs;
       ......
       if(cs.moveToFirst())
       {
          do{
             ......
          }while(cs.moveToNext());
        }