все. Я хочу вставить некоторые исходные данные в базу данных (sqlite) при ее создании.
если нет операций вставки, программа работает нормально. но когда я добавляю его, это вызывает ошибку. Я не могу понять. Кажется, андроид получает читаемый дескриптор базы данных, чтобы написать его? Я не уверена. Или, может быть, Android не позволяет вставлять данные в метод onCreate() DatabaseHelper? надеюсь, что кто-то может решить мою проблему.
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 3: /data/data/com.kbonez.prodo/databases/prodo.db
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:170)
**02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at com.kbonez.prodo.ProdoProvider.query(ProdoProvider.java:164)**
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at android.content.ContentProvider$Transport.query(ContentProvider.java:130)
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at android.content.ContentResolver.query(ContentResolver.java:202)
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at android.app.Activity.managedQuery(Activity.java:1495)
02-16 12:34:20.445: ERROR/AndroidRuntime(24947): at com.kbonez.prodo.ProdoList.onCreate(ProdoList.java:129)
Я смотрю на строку 164, это
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Я просто добавляю этот код в свой Provider.DatabaseHelper.onCreate().
final String insTemplate="insert into %s (%s,%s) values (%s);";
for(String i: ct.getResources().getStringArray(R.array.helpInit)){
db.execSQL(String.format(insTemplate,PRODO_TABLE_NAME,Structer.TITLE,Structer.NOTE,i));
}
================================================== ======== решено!
Спасибо всем, ребята, я попробовал. я использую это
// Get the database and run the query
try{
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null,
null, orderBy);
// Tell the cursor what uri to watch, so it knows when its source data
// changes
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}catch(SQLException e){
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
return null;
}
но я не могу понять, почему андроид этого не делает, и нам нужно это сделать.