Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该在每个事务之前检查SQLite是否打开吗?_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 我应该在每个事务之前检查SQLite是否打开吗?

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

在我的数据库中有许多方法,每个方法都是通过将ID作为参数传递来检索特定行的。在我的应用程序中,我需要调用这些方法对检索到的数据执行某些操作。下面的代码就是一个例子。在调用这些方法之前,是否需要检查
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=为了胜利!