我找到了一些关于创建本地SQL数据库的教程。
我需要更新我的数据库的值,或者如果它尚不存在则将其插入表中。
我以为我可以使用“更新”的IF语句和bool属性。
public void onClick(View view) {
if (view == play) {
//Here I am trying to update position one with the value of (int) test
boolean uc = myDb.AggiornaStato("1",test);
//If the field is empty bool should be false, right?
if (uc == false) {
//so .. insert that value
myDb.CreaStato(test);
}
//next time, update should be true, and It won't create another ID
startService(new Intent(this, t1.class));
}
我必须管理七个ID,因此我将为每个ID和每一行创建不同的方法。我知道这不是正确的方法,但我找不到符合我需要的东西。当应用程序启动时,它创建空数据库和表,所以我第一次需要插入值,但后来我只需要更新,我想我可以使用“如果那么其他”但我在某处乱搞!
这是我在databaseHelper类中创建的(CreaStato)或更新(Aggiorna Stato)
public boolean CreaStato(int stato) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_6, stato);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1)
return false;
else
return true;
}
public boolean AggiornaStato (String id, int stato) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, id);
contentValues.put(COL_6, stato);
db.update(TABLE_NAME, contentValues, "ID = ?", new String[] { id });
return true;
}
答案 0 :(得分:0)
您的AggiornaStato()
函数始终返回true
。
update() function返回实际更新的行数,因此您必须检查:
public boolean AggiornaStato (String id, int stato) {
...
int rows = db.update(TABLE_NAME, contentValues, "ID = ?", new String[]{ id });
return rows > 0;
}
public void onClick(View view) {
...
boolean updated = myDb.AggiornaStato("1", test);
if (!updated)
myDb.CreaStato(test);
...
}
(最好用insert()替换insertOrThrow()。)