如何使用一个按钮在添加和删除sqlite数据库中的数据之间进行交换?

时间:2015-12-22 18:37:36

标签: android sqlite

我有一个sqlite数据库,它收集用户的数据,也可以删除它。 这是创建它:

db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, DATA TEXT UNIQUE) ");

这里是添加数据和删除数据的代码

public boolean insertData(String data) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cValues = new ContentValues();
    cValues.put(Col_2, data);
    long result = db.insert(TABLE_NAME, null, cValues);
    if (result == -1)
        return false;
    else
        return true;
}


 public boolean deleteData(String data){
    SQLiteDatabase db = this.getWritableDatabase();
    long result = db.delete(TABLE_NAME, "DATA = ?", new String[]{data});
    ContentValues cValues = new ContentValues();
    if (result == 0)
        return false;
    else
        return true;
}

这是我尝试使用

的java按钮
public void changeData(){
    favBtn.setOnClickListener(
            new View.OnClickListener(){
                @Override
                    public void onClick(View v){
                       boolean isInserted = myDB.insertData(textView.getText().toString());

                    if(isInserted == true)
                        Toast.makeText(randomApp.this, "Added Data", Toast.LENGTH_LONG).show();

                    else
                        Toast.makeText(randomApp.this, "Data was deleted", Toast.LENGTH_LONG).show();
                        myDB.deleteData(textView.getText().toString());


                }
            }
    );
}

问题是,当单击此按钮时,它会添加数据但不会删除所述数据。它将继续播放添加的数据"吐司并将所述数据添加到数据库中 - 数据存在唯一约束 专栏,但我不确定我做错了什么或失踪了,因为据我所知它不应该加两次。如果已添加数据,则应删除数据,反之亦然。

2 个答案:

答案 0 :(得分:1)

根据您的代码,删除数据代码将始终执行。您插入的数据将立即删除,因此唯一约束不会中断。你没有在你的其他情况下放任何{},它包含两个陈述;第一个被认为是其他内部的声明,第二个将被视为if和else情况之外的声明。因此,要解决此问题,您需要正确放置{}。 (个人意见:尽管只有一个陈述,尝试将{}置于if和else情况下)

您应该将其更改为:

if(isInserted == true)
{
    Toast.makeText(randomApp.this, "Added Data", Toast.LENGTH_LONG).show();
}
else
{
    Toast.makeText(randomApp.this, "Data was deleted", Toast.LENGTH_LONG).show();
    myDB.deleteData(textView.getText().toString());
}

答案 1 :(得分:1)

您首先在每次点击时调用myDB.insertData,因为每次插入都会返回true,因此isInserted将始终为真,这就是为什么要多次添加相同的数据。试试这个:

private isInserted = false;    
public void changeData(){
        favBtn.setOnClickListener(
                new View.OnClickListener(){
                    @Override
                        public void onClick(View v){

                        if(!isInserted){
                            Toast.makeText(randomApp.this, "Added Data", Toast.LENGTH_LONG).show();
                            myDB.insertData(textView.getText().toString());
                        }
                        else{
                            Toast.makeText(randomApp.this, "Data was deleted", Toast.LENGTH_LONG).show();
                            myDB.deleteData(textView.getText().toString());
                        }
                        isInserted = !isInserted;
                    }
                }
        );
    }