Android 我应该在每个事务之前检查SQLite是否打开吗?
在我的数据库中有许多方法,每个方法都是通过将ID作为参数传递来检索特定行的。在我的应用程序中,我需要调用这些方法对检索到的数据执行某些操作。下面的代码就是一个例子。在调用这些方法之前,是否需要检查Android 我应该在每个事务之前检查SQLite是否打开吗?,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,在我的数据库中有许多方法,每个方法都是通过将ID作为参数传递来检索特定行的。在我的应用程序中,我需要调用这些方法对检索到的数据执行某些操作。下面的代码就是一个例子。在调用这些方法之前,是否需要检查SqliteDB.isOpen Java_代码: if (! sqliteDB.isOpen()) { Log.d(TAG, "@fetchItemRelativeToFullList(): Sqlite DataBase Was Closed, and it Will Be Opene
SqliteDB.isOpen
Java_代码:
if (! sqliteDB.isOpen()) {
Log.d(TAG, "@fetchItemRelativeToFullList(): Sqlite DataBase Was Closed, and it Will Be Opened");
sqliteDB = mplOpenHelperDB.getWritableDatabase();
}
Log.d(TAG, "@fetchItemRelativeToFullList(): Sqlite DataBase Is Opened");
String name = mplOpenHelperDB.getLocationName(itemClickedPos+1);
Toast.makeText(getApplicationContext(), "name of location"+name, Toast.LENGTH_SHORT).show();
DataBaseRow dataBaseRow = new DataBaseRow();
if (dataBaseRow != null) {
Log.d(TAG, "@fetchItemRelativeToFullList(): Object of DataBaseRow Class Is Created, Not NULL");
if ( (mplOpenHelperDB.getLocationName(itemClickedPos+1)).equals("") ) {
Log.i(TAG, "@fetchItemRelativeToFullList: getLocationName Is Empty");
dataBaseRow.setLocName("NULL");
}
else {
String targetName = mplOpenHelperDB.getLocationName(itemClickedPos+1);
dataBaseRow.setLocName(targetName);
}
数据库方法示例:
public String getLocationName(long id) {
SQLiteDatabase db = this.getReadableDatabase();
SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT locationName FROM MPLData WHERE "+
BaseColumns._ID+" = "+
Long.toString(id) +" AND locationName IS NOT NULL ", null);
String r;
c.moveToFirst();
if (c.getCount() == 0) {
return "";
} else {
r = c.getString(0);
}
c.close();
db.close();
return r;
}
你的直接问题的答案是“不”。getReadableDatabase()时,数据库是打开的。你很好
FWIW,我猜您有在其他上下文(Ruby、PHP等)中进行db工作的经验。正如大卫指出的那样,你所做的工作远远超过了你需要做的。查看加载程序、内容提供程序和内容解析程序,FTW。否,
getReadableDatabase()
和getWritableDatabase()
创建和/或打开用于读写的数据库。第一次调用它时,将打开数据库,并调用onCreate(SQLiteDatabase)
,onUpgrade(SQLiteDatabase,int,int)
和/或onOpen(SQLiteDatabase)
。与其这样做,我建议查看游标加载程序。一开始它们可能有点大,但它们是超级强大的。FWIW=就其价值而言;FTW=为了胜利!