2012-05-11 2 views
1

Мне нужно удалить несколько строк из моей таблицы базы данных. Это мой код для удаленияandroid, удалите несколько строк в sqlite

String[] paragraph; 
..... 
//here you can to put various strings within it (1 or more) 
..... 
db.delete(mytablename,"Paragraph = ?",paragraphs); 

Он работает с 1 строкой, но он не работает с большим количеством строк. Может кто-нибудь мне помочь, пожалуйста?

Здесь есть ошибка показана LogCat:

05-11 11:03:01.400: E/AndroidRuntime(767): FATAL EXCEPTION: main 
05-11 11:03:01.400: E/AndroidRuntime(767): android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x377500 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:241) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.database.DatabaseUtils.bindObjectToProgram(DatabaseUtils.java:191) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1769) 
05-11 11:03:01.400: E/AndroidRuntime(767): at it.tirocinio.Segnalibro$3$3.onClick(Segnalibro.java:196) 
05-11 11:03:01.400: E/AndroidRuntime(767): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.os.Looper.loop(Looper.java:123) 
05-11 11:03:01.400: E/AndroidRuntime(767): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-11 11:03:01.400: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method) 
05-11 11:03:01.400: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:521) 
05-11 11:03:01.400: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-11 11:03:01.400: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-11 11:03:01.400: E/AndroidRuntime(767): at dalvik.system.NativeStart.main(Native Method) 
+2

вам необходимо равное количество: S, как у вас есть записи в файл 'paragraph' массива, например, «Параграф =? ИЛИ Параграф =? ИЛИ Параграф =?» для массива с длиной 3. – Jens

+1

Это не работает для более чем одной строки. 'Paragraph =?' В db.delete будет принимать только один аргумент выбора. вы можете использовать что-то вроде 'db.rawquery (DELETE FROM table WHERE columnName IN ('name1', 'name2', 'name3')); ' – Tarun

+0

Я понимаю причину, я не могу использовать ваши решения, потому что количество строк является переменной. Я думаю, что я должен использовать for for и повторять инструкцию delete. Любой совет? Я хотел бы иметь лучшее решение. – sleone08

ответ

7
use this way: 


for(int i = 0 ; i < paragraphs.lenght;i++) 
{ 

db.delete(mytablename,"Paragraph ='"+paragraphs[i]+"'",null); 
} 
+0

идеальное решение .. :) –

+0

Разве нет способа сделать это в одном запросе? этот подход был бы слишком дорогостоящим для (скажем) около 100 строк. – eRaisedToX

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