SQLite更新和bool结果

时间:2017-05-01 15:20:39

标签: android sql sqlite boolean sql-insert

我找到了一些关于创建本地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;

    }

1 个答案:

答案 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()。)