2012-02-08 2 views
0

Мне интересно, как обновить таблицу.Android: проблема с обновлением поля таблицы

У меня есть использование ниже двух методов для обновления таблицы.

Какая из них правильная и что-то не так? Как я получил Исключение во время использования обоих.

Код:

//First One For Update 
public boolean setFavouriteBook(String id){ 
    String query = "update Articles set type = 0 Where address = '"+id+"'"; 
    myDataBase.rawQuery(query, null); 
    return true; 
} 

// Second One for Update 
//---updates a title--- 
public boolean setFavourite(String address) 
{ 
    ContentValues args = new ContentValues(); 
    args.put("type", 0); 

    return myDataBase.update("Articles", args, "address = '"+address+"'", null) > 0; 
} 

И Бревно:

02-08 10:29:56.010: INFO/Database(10350): sqlite returned: error code = 8, msg = prepared statement aborts at 28: [UPDATE Articles SET type=? WHERE address = '3'] 
02-08 10:29:56.010: ERROR/Database(10350): Error updating type=0 using UPDATE Articles SET type=? WHERE address = '3' 
02-08 10:29:56.021: DEBUG/AndroidRuntime(10350): Shutting down VM 
02-08 10:29:56.021: WARN/dalvikvm(10350): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350): FATAL EXCEPTION: main 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350): android.database.sqlite.SQLiteException: error code 8: attempt to write a readonly database 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.database.sqlite.SQLiteStatement.native_execute(Native Method) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1692) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1622) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at com.project.SkadebogenApp.DataBaseHelper.setFavourite(DataBaseHelper.java:417) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at com.project.SkadebogenApp.CommonWebViewActivity.onClick(CommonWebViewActivity.java:204) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.view.View.performClick(View.java:2408) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.view.View$PerformClick.run(View.java:8816) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.os.Handler.handleCallback(Handler.java:587) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.os.Looper.loop(Looper.java:123) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-08 10:29:56.041: ERROR/AndroidRuntime(10350):  at dalvik.system.NativeStart.main(Native Method) 
02-08 10:29:56.071: WARN/ActivityManager(59): Force finishing activity com.project.SkadebogenApp/.CommonWebViewActivity 
02-08 10:29:56.600: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{450b78f8 com.project.SkadebogenApp/.CommonWebViewActivity} 

ответ

3

Если Ваша база данных находится в SDCard.

Если у вас есть ваша база данных в SDCard, вам необходимо предоставить разрешение WRITE_EXTERNAL_STORAGE в вашем файле манифеста. Вы можете ответить this ответ на эту же проблему.

Иначе вы можете использовать

SQLiteDatabase.OPEN_READWRITE вместо SQLiteDatabase.OPEN_READONLY во время открытия базы данных.

checkDB = SQLiteDatabase.openDatabase(myPath, null, 
               SQLiteDatabase.OPEN_READWRITE); 
+0

Спасибо. Оно работает. –

0

Я не уверен на 100%, но, вы не можете использовать адрес в качестве имени столбца, оно отражает с некоторыми ключевыми словами в базе данных , просто попробуйте переименовать это поле с адресом1, а затем выполните свой запрос.

+0

Нет, это не так. , , , Потому что я открываю базу данных только с режимом чтения. И для обновления также требуется режим записи. –

+0

ОК, вот почему я отвечаю, что я не уверен на 100%. У меня такая же проблема с именем столбца «name» в Visual Basic 6.0 – Lucifer

2

Эй шоу ошибки в файле журнала, который вы открываете БД в Readable режиме и здесь вы пишете что-то в базе данных так просто getWritableDatabase(); использование этого. может быть, это будет полезно для вас
или вы можете принять разрешение WRITE_EXTERNAL_STORAGE.

Thanks

Смежные вопросы