Не знаю точно, но, на мой взгляд, я считаю, что вам нужно открыть базу данных в методе onResume вашей активности и закрыть ее на паузе.Что касается курсоров, вы должны закрыть их после того, как они вам не нужны.Например, если ваш вспомогательный класс базы данных возвращает курсор в результате запроса, вы должны закрыть его при обработке всех строк курсора.
Я советую вам рассмотреть пример Блокнота.Есть несколько очень хороших советов, как работать с базами данных в Android.
ОБНОВЛЕНИЕ: Вот пример, как я обычно заполняю свой список в деятельности:
public class AcWords extends Activity {
/** Called when the activity is first created. */
DbWordsAdapter dbWordsAdapter;
ListView vw;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_words);
vw = (ListView) findViewById(R.id.ac_words_lv_words);
dbWordsAdapter = new DbWordsAdapter(this);
dbWordsAdapter.open();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
SimpleCursorAdapter adtWord = new SimpleCursorAdapter(this, R.layout.ac_words_vw_wordrow,
dbWordsAdapter.getWordsOrderedByAlph(),
new String[] { DbWordsAdapter.C_WORD, DbWordsAdapter.C_EXPLANATION },
new int[] { R.id.ac_words_vw_wordrow_tv_word, R.id.ac_words_vw_wordrow_tv_explanation });
vw.setAdapter(adtWord);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
dbWordsAdapter.close();
}
}
А это мой вспомогательный класс:
public class DbWordsAdapter {
private static final String TAG = DbWordsHelper.class.getSimpleName();
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static DbWordsHelper dbWordsHelper;
private Context context;
private SQLiteDatabase mDb;
// database constants
private static final String DB_NAME = "words.db";
private static final int DB_VERSION = 1;
private static final String TABLE_WORDS = "words";
// database columns names
public static final String C_ID = BaseColumns._ID;
public static final String C_WORD = "word";
public static final String C_EXPLANATION = "explanation";
public static final String C_CREATION_DATE = "creation_date";
//Sql Statements
static final String CREATE_TABLE_WORDS = "create table " + TABLE_WORDS
+ "(" + C_ID + " integer primary key autoincrement, " + C_WORD
+ " text not null, " + C_EXPLANATION + " text, "
+ C_CREATION_DATE + " date not null)";
static final String DROP_TABLE_WORDS = "drop table if exists "
+ TABLE_WORDS;
static final String[] ALL_COLUMNS = { C_ID, C_WORD, C_EXPLANATION,
C_CREATION_DATE };
static final String ORDER_BY_DATE = C_CREATION_DATE + " desc";
static final String ORDER_BY_ALPH = C_WORD + " asc";
static final String ORDER_BY_RANDOM = "random() limit 1";
/*
* Inner class that manages database creation and management
*/
private static class DbWordsHelper extends SQLiteOpenHelper {
private DbWordsHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "SqlCreate Statement: "
+ CREATE_TABLE_WORDS);
try {
db.execSQL(CREATE_TABLE_WORDS);
} catch (SQLException e) {
Log.e(TAG, "Error while creating database" + TABLE_WORDS, e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Here in the future should be method that change the schema of the
// database. Now we just delete
try {
db.execSQL(DROP_TABLE_WORDS);
} catch (SQLException e) {
Log.e(TAG, "Error while updating database" + TABLE_WORDS, e);
}
onCreate(db);
}
}
public DbWordsAdapter(Context context) {
this.context = context;
}
public DbWordsAdapter open () {
if (dbWordsHelper == null) {
dbWordsHelper = new DbWordsHelper(context);
}
mDb = dbWordsHelper.getWritableDatabase();
return this;
}
public void close () {
dbWordsHelper.close();
dbWordsHelper = null;
}
public Cursor getWordDetails(long rowId) {
Log.d(TAG, "getWordDetails method");
Cursor mCursor = mDb.query(TABLE_WORDS, ALL_COLUMNS, C_ID + "=?",
new String[] { String.valueOf(rowId) }, null, null, null);
return mCursor;
}
}
Вы можете использовать его в качестве шаблона для вашего дела.