安卓:计数以及从sqlite的删除行 [英] Android: Count and delete rows from sqlite

查看:135
本文介绍了安卓:计数以及从sqlite的删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的数据库表中删除一些记录,例如表A B表。双方的表A B表有一个列名 sycn_status 。我想只删除这些记录,其中 sync_status 的值 C 。为此,我写了下面的方法,但我发现了异常。

 公共无效RemoveSyncData(){    DBHelper =新DatabaseHelper(背景);
    //分贝= DBHelper.getWritableDatabase();    db.execSQL(DELETE FROM+ DATABASE_TABLE_DAILY_ATTENDANCE +WHERE KEY_ATTENDANCE_SYN_STATUS ='C');
    db.close();

在这里,我只检查一个表。第二件事我想算的删除记录,以便用户应该知道有多少数据被删除。

logcat的错误

  5月6日至29日:02:55.845:E / AndroidRuntime(1594):致命异常:主要
5月6日至29日:02:55.845:E / AndroidRuntime(1594):android.database.sqlite.SQLiteException:没有这样的列:KEY_ATTENDANCE_SYN_STATUS(code 1),在编译:DELETE FROM WHERE dailyattendance = KEY_ATTENDANCE_SYN_STATUS'C'
5月6日至29日:02:55.845:E / AndroidRuntime(1594):在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)
5月6日至29日:02:55.845:E / AndroidRuntime(1594):在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:882)
5月6日至29日:02:55.845:E / AndroidRuntime(1594):在android.database.sqlite.SQLiteConnection prepare(SQLiteConnection.java:493)

删除数据库记录的方法。
我打电话从按钮单击删除方法

  @燮pressLint(NewApi)公共无效CleanAppDataClick(查看V){    progressDialog =新ProgressDialog(Others.this);
    progressDialog.setTitle(清洁);
    progressDialog.setMessage(请稍候...); //
    Log.e(按钮删除数据,点击);
    usersqlite_obj.open();
    usersqlite_obj.RemoveSyncData();
    dismissLoadingDialog();
}

下面是数据库类中的方法。

 公共布尔RemoveSyncData(){    DBHelper =新DatabaseHelper(背景);
    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();
    返回true;}


解决方案

试试这个

  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结束前去除双引号的最后次数。

I want to delete some records from my database tables, for example table A and table B. Both table A and table B has a column name sycn_status. I want to delete only those records where the value of sync_status is C. For this purpose I wrote the following method but I'm getting the exception.

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(); 

Here I'm only checking for one table. and the second thing I want to count the deleting records so that users should know how much data is deleted.

Logcat errors

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)

Database method for deleting records. i'm calling the delete method from the button click

    @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();
}

Here is the method in database class.

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;

}

解决方案

try this

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

UPDATE:

As requested in one of the comments, the problem was with statement which is executed.

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

In the above statement SQLite will not be able to recognize the string as valid.

DATABASE_TABLE_DAILY_ATTENDANCE is a string value which does not require double quotes around it.

KEY_ATTENDANCE_SYN_STATUS was included within double quotes, but its already a string value, so moving it out of double quotes.

'C'" String was ending here, since the quote ended before keyword KEY_ATTENDANCE_SYN_STATUS removing the last occurance of double quotes.

这篇关于安卓:计数以及从sqlite的删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆