Я учился (медленно, но верно), как работать с базами данных sqlite в системах Android.Используя информацию, которую я нашел здесь:
http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/
Я научился создавать, загружать вещи и получать информацию из базы данных на моей системе Android.Одна из проблем заключалась в следующем методе:
public Cursor getClientsCursor() {
StudioTabOpenHelper dbAdapter=StudioTabOpenHelper.getDBAdapterInstance(this.getListView().getContext());
try {
dbAdapter.createDatabase();
} catch (IOException e) {
Log.i("*** select ",e.getMessage());
}
dbAdapter.openDataBase();
String query="SELECT * FROM CLIENTS;";
Cursor c = dbAdapter.selectRecordsFromDB(query, null);
//dbAdapter.close();
return c;
}
Проблема заключалась в том, что приведенный выше код закрывал адаптер, который я открыл ... Это приводило к тому, что часть, в которой я использовал этот возвращаемый курсор, жаловалась на эту базу данных.Конн # 0 уже закрыт.Поэтому я прокомментировал, что dbAdapter.close ();Я думаю, что это плохо в будущем, если я снова вызову этот метод.
Итак, мой вопрос: должен ли я в начале своего приложения создать dbAdapter и открыть базу данных, оставить ее открытой и никогда не закрывать?(как мне передать dbAdapter действиям, фрагментам и т. д., если я пойду по этому пути) ... или как я могу использовать метод getClientsCursor как есть и найти другой способ вернуть курсор назад и иметь возможность вызывать.близко()?
/**
* Open the database
* @throws SQLException
*/
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
/**
* Close the database if exist
*/
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
Код моего адаптера был получен отсюда:
http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/
Я просто не вызывал свой класс DBAdapter, а назвал его StudioTabOpenHelper.