@@ -39,7 +39,7 @@ public abstract class SQLiteOpenHelper {
39
39
private final CursorFactory mFactory ;
40
40
private final int mNewVersion ;
41
41
42
- private SQLiteDatabase mDatabase = null ;
42
+ private SQLiteDatabase mDatabaseRO , mDatabaseRW = null ;
43
43
private boolean mIsInitializing = false ;
44
44
45
45
/**
@@ -75,8 +75,8 @@ public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int
75
75
* @return a read/write database object valid until {@link #close} is called
76
76
*/
77
77
public synchronized SQLiteDatabase getWritableDatabase (String password ) {
78
- if (mDatabase != null && mDatabase .isOpen () && ! mDatabase . isReadOnly ()) {
79
- return mDatabase ; // The database is already open for business
78
+ if (mDatabaseRW != null && mDatabaseRW .isOpen ()) {
79
+ return mDatabaseRW ; // The database is already open for business
80
80
}
81
81
82
82
if (mIsInitializing ) {
@@ -91,7 +91,7 @@ public synchronized SQLiteDatabase getWritableDatabase(String password) {
91
91
92
92
boolean success = false ;
93
93
SQLiteDatabase db = null ;
94
- if (mDatabase != null ) mDatabase .lock ();
94
+ if (mDatabaseRW != null ) mDatabaseRW .lock ();
95
95
try {
96
96
mIsInitializing = true ;
97
97
if (mName == null ) {
@@ -135,13 +135,13 @@ public synchronized SQLiteDatabase getWritableDatabase(String password) {
135
135
} finally {
136
136
mIsInitializing = false ;
137
137
if (success ) {
138
- if (mDatabase != null ) {
139
- try { mDatabase .close (); } catch (Exception e ) { }
140
- mDatabase .unlock ();
138
+ if (mDatabaseRW != null ) {
139
+ try { mDatabaseRW .close (); } catch (Exception e ) { }
140
+ mDatabaseRW .unlock ();
141
141
}
142
- mDatabase = db ;
142
+ mDatabaseRW = db ;
143
143
} else {
144
- if (mDatabase != null ) mDatabase .unlock ();
144
+ if (mDatabaseRW != null ) mDatabaseRW .unlock ();
145
145
if (db != null ) db .close ();
146
146
}
147
147
}
@@ -161,21 +161,14 @@ public synchronized SQLiteDatabase getWritableDatabase(String password) {
161
161
* or {@link #close} is called.
162
162
*/
163
163
public synchronized SQLiteDatabase getReadableDatabase (String password ) {
164
- if (mDatabase != null && mDatabase .isOpen ()) {
165
- return mDatabase ; // The database is already open for business
164
+ if (mDatabaseRO != null && mDatabaseRO .isOpen ()) {
165
+ return mDatabaseRO ; // The database is already open for business
166
166
}
167
167
168
168
if (mIsInitializing ) {
169
169
throw new IllegalStateException ("getReadableDatabase called recursively" );
170
170
}
171
171
172
- try {
173
- return getWritableDatabase (password );
174
- } catch (SQLiteException e ) {
175
- if (mName == null ) throw e ; // Can't open a temp database read-only!
176
- Log .e (TAG , "Couldn't open " + mName + " for writing (will try read-only):" , e );
177
- }
178
-
179
172
SQLiteDatabase db = null ;
180
173
try {
181
174
mIsInitializing = true ;
@@ -188,11 +181,11 @@ public synchronized SQLiteDatabase getReadableDatabase(String password) {
188
181
189
182
onOpen (db );
190
183
Log .w (TAG , "Opened " + mName + " in read-only mode" );
191
- mDatabase = db ;
192
- return mDatabase ;
184
+ mDatabaseRO = db ;
185
+ return mDatabaseRO ;
193
186
} finally {
194
187
mIsInitializing = false ;
195
- if (db != null && db != mDatabase ) db .close ();
188
+ if (db != null && db != mDatabaseRO ) db .close ();
196
189
}
197
190
}
198
191
@@ -202,9 +195,14 @@ public synchronized SQLiteDatabase getReadableDatabase(String password) {
202
195
public synchronized void close () {
203
196
if (mIsInitializing ) throw new IllegalStateException ("Closed during initialization" );
204
197
205
- if (mDatabase != null && mDatabase .isOpen ()) {
206
- mDatabase .close ();
207
- mDatabase = null ;
198
+ if (mDatabaseRO != null && mDatabaseRO .isOpen ()) {
199
+ mDatabaseRO .close ();
200
+ mDatabaseRO = null ;
201
+ }
202
+
203
+ if (mDatabaseRW != null && mDatabaseRW .isOpen ()) {
204
+ mDatabaseRW .close ();
205
+ mDatabaseRW = null ;
208
206
}
209
207
}
210
208
0 commit comments