public ArrayList<Info> queryDatabase(DatabaseHelper dbHelper,String table, String[] columns, String selection, 
String[] selectionArgs, String groupBy, String having, String orderBy){ ArrayList<Info> infoList = new ArrayList<Info>();
db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(table, columns, selection, 
selectionArgs, groupBy, having, orderBy);
while(cursor.moveToNext()==true){
Info info = new Info();
     info.id = Integer.valueOf(cursor.getString(cursor.getColumnIndex("id")));
     info.accountname = cursor.getString(cursor.getColumnIndex("accountname"));
     info.in_out = cursor.getString(cursor.getColumnIndex("in_out"));
     info.logo = Integer.valueOf(cursor.getString(cursor.getColumnIndex("logo")));
     info.moneys = cursor.getString(cursor.getColumnIndex("moneys"));
     info.re = cursor.getString(cursor.getColumnIndex("re"));
     info.sort = cursor.getString(cursor.getColumnIndex("sort"));
     info.time = cursor.getString(cursor.getColumnIndex("time"));
     info.user = cursor.getString(cursor.getColumnIndex("user"));
     infoList.add(info);
     }
cursor.close();

return infoList;
}
这个是我查询的方法,每查上3次log就会打出一堆error信息,应用还是可以继续查询的,没有影响,但老看着那些error就是不舒服,如果每次查询完都关闭数据库,效率上会不会降低很多?有别的方法解决吗

解决方案 »

  1.   

    只要把你的cursor放到所有查询完毕,也就是while完成之后关闭不就可以了吗?何必非要查一次就关一次,只要保证所有查询结束时关闭即可。
      

  2.   

    cursor用完必须关闭。数据库没怎么注意过
      

  3.   

    Cursor用完后必须及时的关闭,否则时间操作过长会出现性能问题。
      

  4.   

    我说清楚点··查询数据库我都用的上面的代码,游标在while循环结束后也有cursor.close();我的想法是在主页面结束后,也就是软件退出的时候再关闭数据库,在查询结束只关闭游标,现在的情况就是每查询几次后就会出error:11-24 04:11:06.183: ERROR/Database(643): java.lang.IllegalStateException: /data/data/com.finance/databases/myRegister SQLiteDatabase created and never closed这种情况怎么解决,需要频繁的关闭数据库吗
      

  5.   

    楼主,不要犹豫了,肯定的关啊,不光是android是这样的,别的也是这样;
    不关肯定会有异常的
      

  6.   

    楼主要不你把关闭操作放在生命周期函数中,我曾经在注册广播时也有类似问题,放在onDestroied里就好了.
      

  7.   

    onDestroied里面关闭的Cursor、数据库没有关过、不知道会不会有影响