Mam następujące klasy „Singleton”, aby obsługiwać połączenia SQLite i upewnij się, że 1 instancji połączenia dla całego procesu/aplikacji:SQLite w stanie otworzyć plik bazy danych (kod 14) na częste „wybierz” zapytania
public class DBController {
private static DBController instance = new DBController();
private static DBHelper dbHelper;
public static DBController getInstance()
{
return instance;
}
public SQLiteDatabase dbOpen(Context context)
{
if(dbHelper == null)
dbHelper = new DBHelper(context);
return dbHelper.getWritableDatabase();
}
}
I klasa DBHelper sama:
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "database.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
final String position = "CREATE TABLE test (" +
"test TEXT NOT NULL);";
db.execSQL(position);
}
}
Kiedy często starają się "SELECT" pewne informacje z bazy danych otrzymuję następujący błąd:
SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1]
SQLiteLog: (14) os_unix.c:31278: (24) open(/data/user/0/uz.mycompany.myapp/databases/database.db-journal) -
SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1]
SQLiteLog: (14) os_unix.c:31278: (24) open(/data/user/0/uz.mycompany.myapp/databases/database.db-journal) -
SQLiteLog: (14) statement aborts at 29: [SELECT * FROM test WHERE test='testdata1'] unable to open database file
SQLiteQuery: exception: unable to open database file (code 14); query: SELECT * FROM test WHERE test='testdata1'
android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
Używam następujący kod do wykonania zapytania:
public String getData(Context context)
{
SQLiteDatabase _db = dbOpen(context);
Cursor c = _db.rawQuery("SELECT * FROM test WHERE test='testdata1'", null);
return getDataFromCursor(c).get(0); //gets data from cursor and returns first one
}
Jak zarządzać/poprawić połączenia z bazą danych w celu przezwyciężenia/uniknąć tego problemu?
Gdzie podajesz bazę danych ** ścieżkę **? Możesz zobaczyć, że coś jest nie tak na tej ścieżce: 'open (/ data/user/0/uz.mycompany.myapp/databases/database.db-journal)'. Powinno to być coś takiego jak '/ data/data/uz.mycompany.myapp/databases/database.db' –
@ HrundiV.Bakshi Dzięki za odpowiedź, myślę, że problem nie jest związany ze ścieżką do bazy danych ... ponieważ Moja aplikacja działa i wszystko jest w porządku, dopóki nie dojdzie do wykonania getData() często/często (co 2 sekundy) ... – JavaMachine
'nie można otworzyć pliku bazy danych' mówi co? –