Solution:
If you have named one of your SQLite tables "default", change the name to something else.Details:
So I was poking around with Android programming the other day, and I ran into this error:
04-12 14:35:09.779: ERROR/AndroidRuntime(790): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/com.example.test/databases/mydatabase.db
04-12 14:35:09.779: ERROR/AndroidRuntime(790): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:170)
The line causing the error was simply calling SQLiteOpenHelper.getReadableDatabase():
SQLiteDatabase db = dbHelper.getReadableDatabase();
I finally narrowed it down to the database table name I was using: "default". As soon as I changed the table name, it worked fine. In fact, I simply changed it from "default" to "default1".
Just to be clear, I wasn't doing anything fancy. I was using pretty basic code to create the database:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DB_TABLE_NAME = "default";
...
public static final String DB_TABLE_CREATE =
"CREATE TABLE " + DB_TABLE_NAME...
It doesn't appear to be a SQLite thing, because according to their documentation the only reserved table names begin with "sqlite_". So it appears to be an Android issue, and as far as I can tell it isn't documented.
I checked the database after I changed the name, and the "default" table was never created either, so I'm not sure why it wouldn't work:
sqlite> .tables
android_metadata default1
A bug, perhaps?