如何使用Android从sqlite中的表中删除所有记录?

新手上路,请多包涵

我的应用程序有两个按钮,第一个按钮用于删除用户输入的记录,第二个按钮用于删除所有记录。但是当我想删除数据时,它会显示消息

“您的应用程序已被强制停止”。

请检查我的代码并给我一些建议。

 public void deleteAll()
{
    //SQLiteDatabase db = this.getWritableDatabase();
   // db.delete(TABLE_NAME,null,null);
    //db.execSQL("delete * from"+ TABLE_NAME);
    db.execSQL("TRUNCATE table" + TABLE_NAME);
    db.close();
}

public void delete(String id)
{
    String[] args={id};
    getWritableDatabase().delete("texts", "_ID=?", args);
}

但它显示以下 Log cat 错误。

 03-07 15:57:07.143: ERROR/AndroidRuntime(287): Uncaught handler: thread main exiting due to uncaught exception
03-07 15:57:07.153: ERROR/AndroidRuntime(287): java.lang.NullPointerException
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.example.MySQLiteHelper.delete(MySQLiteHelper.java:163)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.example.Settings$4.onClick(Settings.java:94)
-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.os.Looper.loop(Looper.java:123)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at android.app.ActivityThread.main(ActivityThread.java:4203)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at java.lang.reflect.Method.invoke(Method.java:521)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-07 15:57:07.153: ERROR/AndroidRuntime(287):     at dalvik.system.NativeStart.main(Native Method)

原文由 Sandip Armal Patil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 893
2 个回答

您错过了一个空格: db.execSQL("delete * from " + TABLE_NAME);

甚至不需要包括 * ,正确的查询是:

 db.execSQL("delete from "+ TABLE_NAME);

原文由 viplezer 发布,翻译遵循 CC BY-SA 3.0 许可协议

截断 SQLite 表?

接受的答案对于截断是不正确的。 在 SQLite 中,它是通过 2 个查询来实现的;

 1. db.execSQL("delete from "+ TABLE_NAME);
2. db.execSQL("UPDATE SQLITE_SEQUENCE SET seq = 0 WHERE name = '"+ TABLE_NAME+"'");

记住第二个查询中的单引号

那么为什么这两个查询呢?

  • OP询问了trucate。
  • 这意味着删除所有记录并将该表的自动增量值设置为 0
  • 这就是我们所做的,在这里。 (并且截断命令在 SQLite 中不可用 [直到发布日期答案])

原文由 sifr_dot_in 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题