【问题标题】:Helper class for sqlite database doesn't worksqlite 数据库的帮助程序类不起作用
【发布时间】:2014-02-27 04:42:18
【问题描述】:

我在我的活动中使用了以下代码,它检查数据库错误并且工作正常:

//DB Test
        Boolean databaseError = false;
        SQLiteDatabase myDB = null;
        myDB = this.openOrCreateDatabase("myDB", 0, null);        
        try {
             myDB.rawQuery("SELECT _id FROM occasions;", null);
             myDB.rawQuery("SELECT _id FROM instrumentations;", null); 
             myDB.rawQuery("SELECT _id FROM editions;", null); 
             myDB.rawQuery("SELECT _id FROM composers;", null); 
             myDB.rawQuery("SELECT _id FROM compositions;", null); 
        } catch (SQLiteException e) {
            Log.e("SQLiteException", "SQLiteException");
            databaseError = true;       
        }
        myDB.close();

我想把代码放在下面的帮助类中:

public abstract class BackupHelper {

public static boolean checkDB() {
    Boolean databaseError = false;
    SQLiteDatabase myDB = null;
    myDB = SQLiteDatabase.openDatabase("myDB", null, SQLiteDatabase.OPEN_READWRITE);        
    try {
         myDB.rawQuery("SELECT _id FROM occasions;", null);
         myDB.rawQuery("SELECT _id FROM instrumentations;", null); 
         myDB.rawQuery("SELECT _id FROM editions;", null); 
         myDB.rawQuery("SELECT _id FROM composers;", null); 
         myDB.rawQuery("SELECT _id FROM compositions;", null); 
    } catch (SQLiteException e) {
        Log.e("SQLiteException", "SQLiteException");
        databaseError = true;       
    }
    myDB.close();
    return databaseError;
}

}

但这会引发以下错误:

02-26 21:13:16.397: E/MyTestDatabase(29244): sqlite3_open_v2("myDB", &handle, 2, NULL) 失败 02-26 21:13:17.048: E/AndroidRuntime(29244): 原因: android.database.sqlite.SQLiteException: 无法打开数据库文件

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您必须先创建数据库,然后再尝试打开它。

    创建一个扩展 SQLiteOpenHelper 的类

    public class DBCreator extends SQLiteOpenHelper {
    
        // region Properties
    
        private final static String tag = "DBCreator";
    
        // endregion
    
        // region Constructors
    
        public DBCreator(String name, int version) {
            super(ABApplication.getContext(), name, null, version);
        }
    
        public DBCreator(Context context, String name, CursorFactory factory,
                int version) {
            super(context, name, factory, version);
        }
    
        public DBCreator(Context context, String name, CursorFactory factory,
                int version, DatabaseErrorHandler errorHandler) {
            super(context, name, factory, version, errorHandler);
        }
    
        // endregion
    
        // region Overrides
        @Override
        public void onCreate(SQLiteDatabase db) {
    
            // Execute your CREATE Table script
        }
    
        // endregion 
    
    }
    

    那么你可以通过这种方式检索一个 SQLiteDatabase 实例:

     SQLiteDatabase SQLiteDatabase = new DBCreator(context, dbName, null, 1) getWritableDatabase();
    

    【讨论】:

    • 谢谢。我已经有一个扩展 sqliteopenhelper 的类,但没有使用它;-) 现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多