Ошибка статического метода базы данных openDatabase SQLite в Android

Я создал статический метод для доступа к моей базе данных в одном из моих действий, но я продолжаю получать сообщение об ошибке при открытии базы данных.

Основная деятельность

 public static String getStudentData() {

    SQLiteDatabase sampleDB =  null;

    try {
            //NOT WORKING
        sampleDB =  SQLiteDatabase.openDatabase("studentDB",null, SQLiteDatabase.CREATE_IF_NECESSARY); 
            //Also not working
        //sampleDB =  SQLiteDatabase.openOrCreateDatabase("studentDB", null);

        Cursor c = sampleDB.rawQuery("SELECT * FROM student where id='1'", null);

        if (c != null ) {
            if  (c.moveToFirst()) {
                do {
                    //...                       
                }while (c.moveToNext());
            } 
        }
        c.close();
    } catch (Exception se ) {
    } finally {
            sampleDB.close();
    }
}

ДругоеАктивность

String student = MainActivity.getStudentData();

Я получаю sqlite3_open_v2("studentDB", &handle, 6, NULL) failed. Не могу найти, что не так... Я также пытался использовать MODE_WORLD_WRITEABLE. В настоящее время используется MODE_PRIVATEдля создания базы данных. Пожалуйста, помогите мне!


person newbie    schedule 12.10.2011    source источник


Ответы (2)


Первый аргумент openDatabase должен быть полным путем к базе данных, поэтому, если:

//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";

private static String DB_NAME = "studentDB";

то вы должны позвонить:

sampleDB =  SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
person Caner    schedule 12.10.2011
comment
вау, ты прав! Я не ожидал, что мне нужно будет ввести полный путь для статического метода. Обычно я просто делаю sampleDB = SQLiteDatabase.openOrCreateDatabase("studentDB", null); в рамках активности. Первый раз пробую статические методы. Спасибо! - person newbie; 12.10.2011
comment
Разве нам не нужно добавлять расширение studentDB.db или studentDB.sqlite? - person Siddarth G; 04.08.2017

Используйте метод ContextWrapper#getDatabasePath(java. lang.String) и передать результат в SQLiteDatabase.openDatabase:

File dbFile= myActivity.getDatabasePath("studentDB");
sampleDB = SQLiteDatabase.openDatabase(dbFile.getAbsolutePath(), null, SQLiteDatabase.CREATE_IF_NECESSARY);
person mako    schedule 27.04.2012