Android'de SQlite veritabanından yazmak ve okumak için SQLiteOpenHelper kullanıyorum. Kullanıcı kullanıcı arabirimine tıkladığında AsyncTask kullanarak SQLite veritabanından okudum, ancak tam bir samo anında diğer AsyncTask'ı kullanarak veritabanını veritabanında yazıyor ve yazıyor.Android SQlite multithread erişim
Her x kez veritabanı kilitli özel durum alırım. Bunu nasıl düzeltebilirim? SQlite aynı anda birden fazla iş parçacığı üzerinden erişilebilir mi?
Bunu şu şekilde kullanıyorum: SQLiteOpenHelper'dan uzanan bir veritabanı sınıfım var. Ben onCreate ve ONUPGRADE yöntemlerini uygulamaya ve her şey veritabanından okuma veya veritabanına yazıyorum ben böyle SQLiteDatabase kullanın:
SQLiteDatabase database = null;
try {
database = new Database(context).getWritableDatabase();
....
writing and reading from database...
....
} catch (Exception e) {
e.printStackTrace();
} finally {
if (database != null) {
database.close();
}
}
sonunda ben de yakın SQLiteStatements ve imleçler azından ben bunları kullanmak eğer. @Justin cevap kullanmalı ve uygulamada bir tek sınıf veritabanı sınıfı kullanmalı mıyım?
E/SqliteDatabaseCpp(17377): sqlite3_open_v2("/data/data/com.skulptur/databases/LGM.s3db", &handle, 6, NULL) failed
E/SQLiteDatabase(17377): Failed to open the database. closing it.
E/SQLiteDatabase(17377): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
E/SQLiteDatabase(17377): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:750)
E/SQLiteDatabase(17377): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
E/SQLiteDatabase(17377): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:223)
Bence sqllite üzerindeki android kütüphaneleri ile yapabileceğiniz her şey senkronize edilir. İstisnai yakalamaya çalışabilir ve kilit durumunu alırsanız tekrar deneyemez misiniz? – quinestor
Gönderinizi düzenleyebilir ve istisna ve sebep bildirimlerinin ilk satırlarını verebilir misiniz? Yaptığınız şeyden daha az, kapalı bir veritabanını veya bir şeyi yeniden kullanmak hakkında daha fazla şüpheliyim. – Gray