2012-05-11 50 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中所示的错误:因为你在你的`paragraph`阵列,例如条目S:

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

你需要相同数量的? “Paragraph =?OR Paragraph =?OR Paragraph =?”对于长度为3的数组。 – Jens

+1

它不适用于多个字符串。 'db.delete中的段落=?'将只接受一个选择参数。你可以使用类似'db.rawquery(DELETE FROM table WHERE columnName IN('name1','name2','name3')); ' – Tarun

+0

我明白原因,我不能使用你的解决方案,因为字符串的数量是可变的。我认为我必须使用for并重复删除语句。有什么建议?我想有最好的解决方案。 – sleone08

回答

7
use this way: 


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

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

完美的解决方案.. :) –

+0

没有办法在单个查询中这样做吗?这种方法对于(比方说)大约100行来说成本太高。 – eRaisedToX