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