Android:从sqlite中计算和删除行

时间:2015-06-29 05:19:30

标签: java android sqlite

我想从我的数据库表中删除一些记录,例如表A 表B 表A 表B 都有一个列名sycn_status。我只想删除sync_status的值为 C 的记录。为此我编写了以下方法,但我得到了例外。

public void RemoveSyncData(){

    DBHelper = new DatabaseHelper(context); 
    //db = DBHelper.getWritableDatabase();

    db.execSQL("DELETE FROM "+ DATABASE_TABLE_DAILY_ATTENDANCE +" WHERE KEY_ATTENDANCE_SYN_STATUS ='C'");
    db.close(); 

这里我只检查一张桌子。第二件事我想计算删除记录,以便用户知道删除了多少数据。

Logcat错误

06-29 05:02:55.845: E/AndroidRuntime(1594): FATAL EXCEPTION: main
06-29 05:02:55.845: E/AndroidRuntime(1594): android.database.sqlite.SQLiteException: no such column:   KEY_ATTENDANCE_SYN_STATUS (code 1): , while compiling: DELETE FROM dailyattendance WHERE KEY_ATTENDANCE_SYN_STATUS ='C'
06-29 05:02:55.845: E/AndroidRuntime(1594):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-29 05:02:55.845: E/AndroidRuntime(1594):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
06-29 05:02:55.845: E/AndroidRuntime(1594):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)

删除记录的数据库方法。 我点击按钮

调用删除方法
    @SuppressLint("NewApi") public void CleanAppDataClick(View V) {

    progressDialog = new ProgressDialog(Others.this);
    progressDialog.setTitle("Cleaning");
    progressDialog.setMessage("Please wait...");//
    Log.e("button delete data", "clicked");           
    usersqlite_obj.open();
    usersqlite_obj.RemoveSyncData();     
    dismissLoadingDialog();
}

这是数据库类中的方法。

public boolean RemoveSyncData(){

    DBHelper = new DatabaseHelper(context); 
    db.execSQL("DELETE FROM "+ DATABASE_TABLE_DAILY_ATTENDANCE +" WHERE "+KEY_ATTENDANCE_SYN_STATUS +"='C'");
    db.execSQL("DELETE FROM "+ DATABASE_TABLE_DCR +" WHERE "+KEY_DCR_SYN_STATUS +"='C'");
    db.execSQL("DELETE FROM "+ DATABASE_TABLE_DCRNV +" WHERE "+KEY_DCRNV_SYN_STATUS +"='C'");


    db.close();
    return true;

}

3 个答案:

答案 0 :(得分:0)

试试这个

 db.execSQL("DELETE FROM "+ DATABASE_TABLE_DAILY_ATTENDANCE +" WHERE "+KEY_ATTENDANCE_SYN_STATUS ='C');

更新:

根据其中一条评论中的要求,问题在于执行的语句。

"DELETE FROM "+ DATABASE_TABLE_DAILY_ATTENDANCE +" WHERE KEY_ATTENDANCE_SYN_STATUS ='C'"

在上面的语句中,SQLite将无法将字符串识别为有效。

DATABASE_TABLE_DAILY_ATTENDANCE是一个字符串值,不需要双引号。

KEY_ATTENDANCE_SYN_STATUS包含在双引号中,但它已经是一个字符串值,因此将其移出双引号。

' C'"字符串在这里结束,因为引用在关键字KEY_ATTENDANCE_SYN_STATUS之前结束,删除了最后出现的双引号。

答案 1 :(得分:0)

根据例外情况,您在字段声明中输入了一个拼写错误

KEY_ATTENDANCE_SYN_STATUS = "KEY_ATTENDANCE_SYN_STATUS".

将其更改为

KEY_ATTENDANCE_SYN_STATUS = "sync_status";

答案 2 :(得分:0)

请检查以下代码

public void RemoveSyncData(){

    DBHelper = new DatabaseHelper(context); 
    //db = DBHelper.getWritableDatabase();

    db.execSQL("DELETE FROM "+ DATABASE_TABLE_DAILY_ATTENDANCE +" WHERE sync_status ='C'");
    db.close();

我希望上面的代码适合你。