从SQLite数据库表中删除所有表行

22

我想从我的SQLite数据库表中删除我输入的所有行。表名为tbltask。 我尝试了删除表和删除* from table,但这些都给我运行时错误。 我想在按钮OnClickListner事件中触发此事件。

以下是我尝试过的代码:

String delete = "DELETE FROM "+DATABASE_TABLE;
db.rawQuery(delete, null);
db.delete(DATABASE_TABLE, null, null);

日志记录器:

11-15 17:45:04.660: DEBUG/AndroidRuntime(300): Shutting down VM
11-15 17:45:04.660: WARN/dalvikvm(300): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): FATAL EXCEPTION: main 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): java.lang.NullPointerException 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at database.com.android.DatabaseAccess.drop(DatabaseAccess.java:258) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.ExtraActivity$3$1.onClick(ExtraActivity.java:61) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.os.Looper.loop(Looper.java:123) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invokeNative(Native Method) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invoke(Method.java:521) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at dalvik.system.NativeStart.main(Native Method) 
11-15 17:45:04.781: WARN/ActivityManager(58): Force finishing activity com.android/.ExtraActivity 
11-15 17:45:05.320: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{45061a70 com.android/.ExtraActivity} 
11-15 17:45:14.857: WARN/ActivityManager(58): Launch timeout has expired, giving up wake lock! 
11-15 17:45:15.402: WARN/ActivityManager(58): Activity idle timeout for HistoryRecord{450141d0 com.android/.WelcomActivity} 
11-15 17:45:20.572: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{45061a70 com.android/.ExtraActivity}

以下是我使用以下查询时的LogCat输出:

        String delete = "DELETE FROM taskTable";
    db.execSQL(delete);

1
你遇到了什么错误?请发布logcat输出。 - dymmeh
1
你遇到了什么错误?试一下不包含rawquery部分的代码:sqLiteDatabase.delete(MYDATABASE_TABLE, null, null); - Rakhita
4个回答

70

只需执行以下操作:

db.delete(DATABASE_TABLE, null, null);

请注意,使用rawQuery应该可以运行,但可能存在潜在的安全风险。

编辑:

关于您在使用时遇到的问题

db.execSQL

阅读文档,它指出你不应该使用execSQL执行INSERT、DELETE、UPDATE或SELECT操作。


0

共识是删除并重新创建表,或者您可以使用DELETE FROM tbltask,它使用类似于其他数据库上的TRUNCATE的性能操作。


0
 getWritableDatabase().execSQL("DELETE FROM " + "contacts" + ";");

这里的 contacs 是我的表名.. 试一下.. 对我来说有效..


这明确与文档相矛盾:"执行一个不是SELECT/INSERT/UPDATE/DELETE的单个SQL语句"。 - dm78

0

使用此方法从数据库表中删除所有值。

private SQLiteDatabase odb;
public void deleteallvalues(){
     odb.delete(TABLE_NAME,null,null)
}

这个工作正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接