Я обнаружил, что после каждого использования я должен закрыть переменную курсора. но проблема в том, что я пытаюсь вернуть курсор в качестве выхода функции. похоже, это невозможно. посмотрите на мой DbHelper, что я пытался закрыть мой курсор и базы данных в своих функциях:Когда следует закрывать переменную курсора?
общественного класса DbHelper расширяет SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, "shareholders.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
String sql = "CREATE TABLE IF NOT EXISTS news (id integer,title text,description text,sDate text)";
db.execSQL(sql);
sql = "CREATE TABLE IF NOT EXISTS cities (id integer,name text)";
db.execSQL(sql);
} catch (Exception e) {
xLog.error(e.getMessage());
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
public long insert(String table,ContentValues cv){
SQLiteDatabase mydb =this.getWritableDatabase();
long result=-1;
try {
result = mydb.insert(table,null, cv);
}catch (Exception e) {
xLog.error(e.getMessage());
}
finally{
mydb.close();
}
return result;
}
public Cursor selectAll(String table){
SQLiteDatabase mydb =this.getReadableDatabase();
String sql = "SELECT * FROM "+table;
xLog.info(sql);
Cursor result=null;
try {
result = mydb.rawQuery(sql, null);
} catch (Exception e) {
xLog.error(e.getMessage());
}
finally{
result.close();
mydb.close();
}
return result;
}
public Cursor select(String table,String where){
SQLiteDatabase mydb =this.getReadableDatabase();
String sql = "SELECT * FROM "+table+" WHERE "+where;
xLog.info(sql);
Cursor result=null;
try {
result = mydb.rawQuery("SELECT * FROM "+table+" WHERE "+where, null);
} catch (Exception e) {
xLog.error(e.getMessage());
}
finally{
result.close();
mydb.close();
}
return result;
}
public long update(String table,ContentValues cv,String condition){
SQLiteDatabase mydb =this.getWritableDatabase();
long result = -1;
try {
result = mydb.update(table, cv, condition, null);
} catch (Exception e) {
xLog.error(e.getMessage());
}
finally{
mydb.close();
}
return result;
}
}
}
Как это изменить?
Так что если я скопирую курсор в другую переменную, то, наконец, еще один курсор еще открыт! Есть ли проблемы с этим? –
Не копируйте ссылку «Курсор», которая назначается другой переменной, но перемещайте курсор и копируйте каждую строку данных в структуру данных, такую как «ArrayList». – laalto