मैं एंड्रॉइड पर एसक्यूलाइट डेटाबेस से लिखने और पढ़ने के लिए SQLiteOpenHelper का उपयोग कर रहा हूं। जब उपयोगकर्ता यूआई पर क्लिक करता है तो मैं AsyncTask का उपयोग करके SQLite डेटाबेस से पढ़ता हूं लेकिन सटीक समो पल पर मैं अन्य AsyncTask का उपयोग करके पृष्ठभूमि में डेटाबेस को अद्यतन और लिख रहा हूं।एंड्रॉइड एसक्यूलाइट मल्टीथ्रेड एक्सेस
हर बार मुझे डेटाबेस लॉक अपवाद मिलता है। मैं इसे कैसे ठीक करूं? क्या एक ही समय में कई धागे से एसक्यूलाइट का उपयोग किया जा सकता है?
मैं इसका उपयोग कर रहा हूं: मेरे पास एक डेटाबेस क्लास है जो SQLiteOpenHelper से फैली हुई है। मैं onCreate और onUpgrade तरीकों को लागू किया और हर मैं डेटाबेस से पढ़ रहा हूँ या डेटाबेस के लिए लिख रहा है कि जैसे SQLiteDatabase का उपयोग करें:
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();
}
}
अंत मैं भी करीब SQLiteStatements और Cursors पर अगर मैं उन्हें का उपयोग करें। क्या मुझे @ जस्टिन उत्तर का उपयोग करना चाहिए और एप्लिकेशन में डेटाबेस क्लास का सिंगलटन होना चाहिए?
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)
मुझे लगता है कि एसक्यूलाइट पर एंड्रॉइड लाइब्रेरीज़ के साथ आप जो कुछ भी कर सकते हैं वह सिंक्रनाइज़ है। क्या आप अपवाद को आजमा सकते हैं और पकड़ सकते हैं और यदि आपको लॉक स्थिति मिलती है तो पुनः प्रयास करें? – quinestor
क्या आप अपनी पोस्ट संपादित कर सकते हैं और अपवाद की पहली पंक्ति और किसी भी कारण बयान दे सकते हैं? मुझे संदेह है कि आप जो कर रहे हैं उसके बारे में कम है और एक बंद डेटाबेस या कुछ का पुनः उपयोग करने के बारे में अधिक जानकारी है। – Gray