我应该在每笔交易之前检查SQLite是否已打开?

时间:2014-06-16 14:24:51

标签: android sqlite android-sqlite

在我的数据库中有许多方法,每个方法都是通过将ID作为参数传递来检索特定行的。而且,在我的应用程序中,我需要调用这些方法对检索到的数据执行某些操作。例如,下面发布的代码。在调用这些方法之前,是否需要检查SqliteDB.isOpen

Java_Code:

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;       
}

2 个答案:

答案 0 :(得分:1)

您当前问题的答案是"否"。当getReadableDatabase()时,db已打开。你很好。

FWIW,我猜你有在其他一些环境(Ruby,PHP等)中进行数据库工作的经验。正如大卫所指出的那样,你做的工作比你需要做的还多。看一下Loaders,ContentProviders和ContentResolvers,FTW。

答案 1 :(得分:1)

否,getReadableDatabase()getWritableDatabase()创建和/或打开将用于读写的数据库。第一次调用此数据库时,将打开数据库并调用onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int)和/或onOpen(SQLiteDatabase)

相关问题