【问题标题】:android, delete multiple rows in sqliteandroid,删除sqlite中的多行
【发布时间】:2012-05-19 22:06:56
【问题描述】:

我需要从我的数据库表中删除多行。 这是我的删除代码

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)

【问题讨论】:

  • 您需要相同数量的 ?:s,因为您的 paragraph 数组中有条目,例如“段落=?或段落=?或段落=?”对于长度为 3 的数组。
  • 它不适用于多个字符串。 db.delete 中的Paragraph = ? 将只接受一个选择参数。你可以使用类似db.rawquery(DELETE FROM table WHERE columnName IN ('name1', 'name2', 'name3'));
  • 我明白原因,我不能使用你的解决方案,因为字符串的数量是可变的。我认为我必须使用 for 并重复 delete 语句。有什么建议吗?我想要最好的解决方案。
  • @sleone08 我不认为 for 循环 for 是一种好方法,因为每个查询删除一行的成本太高。

标签: android sqlite delete-row


【解决方案1】:
use this way:


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

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

【讨论】:

  • 完美解决方案.. :)
  • 没有办法在单个查询中做到这一点吗?这种方法对于(比如说)大约 100 行来说成本太高了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多