Android 称呼;在终结器中释放语句。请确保在光标上显式调用close();
我有两个DB CLSS,一个将DB文件从资产复制到手机 第二个是我一直在进行DB调用,但是在日志中我得到了一个关于我应该关闭光标的错误。这让我感到困惑,因为我所有的调用末尾都有一个cursor.close() 第二组代码:Android 称呼;在终结器中释放语句。请确保在光标上显式调用close();,android,sqlite,Android,Sqlite,我有两个DB CLSS,一个将DB文件从资产复制到手机 第二个是我一直在进行DB调用,但是在日志中我得到了一个关于我应该关闭光标的错误。这让我感到困惑,因为我所有的调用末尾都有一个cursor.close() 第二组代码: public class DatabaseTools extends Common { private Context context; private SQLiteDatabase db; private DatabaseHelper dbHel
public class DatabaseTools extends Common {
private Context context;
private SQLiteDatabase db;
private DatabaseHelper dbHelper;
private Cursor cursor;
public DatabaseTools(Context context) {
this.context = context;
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
}
// MARKS
public ArrayList<String> getNames(String value) {
Names = new ArrayList<String>();
selectStatement = new String[] { DB_COMMON_COL_NAME };
fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'";
cursor = db.query(
DB_DISTANCE_TABLE_NAME,
selectStatement,
fromStatement,
null,
null,
null,
null);
int distanceIndex = cursor.getColumnIndex(DB_COMMON_COL_NAME);
if (cursor.moveToFirst()) {
do {
distanceNames.add(cursor.getString(distanceIndex));
} while (cursor.moveToNext());
}
cursor.close();
return names;
}
公共类数据库工具扩展了公共类数据库工具{
私人语境;
专用数据库数据库;
私有数据库助手dbHelper;
私有游标;
公共数据库工具(上下文){
this.context=上下文;
dbHelper=新数据库助手(上下文);
db=dbHelper.getWritableDatabase();
}
//标记
公共ArrayList getNames(字符串值){
名称=新的ArrayList();
selectStatement=新字符串[]{DB\u COMMON\u COL\u NAME};
fromStatement=DB_COMMON_COL_VALUE+“=”+VALUE+“”;
cursor=db.query(
DB_距离_表格_名称,
选择声明,
fromStatement,
无效的
无效的
无效的
无效);
int distanceIndex=cursor.getColumnIndex(DB\u COMMON\u COL\u NAME);
if(cursor.moveToFirst()){
做{
add(cursor.getString(distanceIndex));
}while(cursor.moveToNext());
}
cursor.close();
返回姓名;
}
尝试以下修改以确保关闭光标。此外,您在构造函数中获得了数据库实例。这不太好。您应该在使用数据库之前获得数据库实例,并在完成后立即调用数据库上的close()。我建议移动db=dbHelper.getWritableDatabase()在getNames(String value)方法中,在完成时调用db.close(),也在finally块中
public ArrayList<String> getNames(String value) {
Names = new ArrayList<String>();
selectStatement = new String[] { DB_COMMON_COL_NAME };
fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'";
cursor = db.query(
DB_DISTANCE_TABLE_NAME,
selectStatement,
fromStatement,
null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
try {
int distanceIndex = cursor.getColumnIndexOrThrow(DB_COMMON_COL_NAME);
while(cursor.moveToNext()) {
distanceNames.add(cursor.getString(distanceIndex));
}
} finally {
if (!cursor.isClosed()) {
cursor.close();
}
}
return names;
}
public ArrayList getNames(字符串值){
名称=新的ArrayList();
selectStatement=新字符串[]{DB\u COMMON\u COL\u NAME};
fromStatement=DB_COMMON_COL_VALUE+“=”+VALUE+“”;
cursor=db.query(
DB_距离_表格_名称,
选择声明,
fromStatement,
空,空,空,空);
if(cursor!=null&&cursor.moveToFirst()){
试一试{
int distanceIndex=cursor.getColumnIndexOrThrow(DB\u COMMON\u COL\u NAME);
while(cursor.moveToNext()){
add(cursor.getString(distanceIndex));
}
}最后{
如果(!cursor.isClosed()){
cursor.close();
}
}
返回姓名;
}