我想从我的数据库表中删除一些记录,例如表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;
}
答案 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();
我希望上面的代码适合你。