如何用sqlite在java中创建一个条件

时间:2014-06-15 04:20:47

标签: java android sqlite

如果数据库中的名字和姓氏将更新分数,我想提出一个条件,否则数据将作为新用户正常插入。

我的代码:

public void data(View view)
{  
    scor=String.valueOf(qc1.scor);
    db.execSQL("UPDATE Student SET email='"+scor+"' WHERE fname ='"+exo.fname+"' AND lname ='"+exo.lname+"';");
     Toast toast = Toast.makeText(getApplicationContext(), "data updated", Toast.LENGTH_LONG);
     toast.show();
}

4 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题:

    Cursor cursor = db.rawQuery("select 1 from Student where fname=? AND lname =?", 
         new String[] { exo.fname, exo.lname });
    if(cursor.getCount() > 0) {
        // this means we found at least one entry that matches the name
        // update database here
    } else {
        // otherwise that user doesn't exist yet
        // insert into database here
    }

答案 1 :(得分:0)

这可能会对你有所帮助

  ContentValues cv = new ContentValues();
  cv.put(columnName,columnValue);
  long x = sqLiteDatabase.update(TableName,cv,columnName1 " = ? and "+columnName2+" = ? ",new String[]{coulmn1Val,column2val});
  if(x<=0){

    // insert data because no any record is updated 
    //insert statement here
  }

答案 2 :(得分:0)

如果您有唯一约束,则可以将insertWithOnConflict与conflictAlgorithm CONFLICT_REPLACE一起使用

  

当发生UNIQUE约束违规时......总是发生插入或更新

答案 3 :(得分:0)

您可以通过几种不同的方式解决此问题:

  1. 检查行是否存在(query())。如果是,则插入,否则,更新。
  2. 尝试更新。如果没有更新记录,则插入。
  3. 我建议使用方法2,因为它可以为您节省一个语句执行(特别是如果更新很常见)。例如:

    ContentValues values = new ContentValues();
    values.put("email", scor);
    if (db.update("Student", values, "fname = ? AND lname = ?", new String[] { exo.fname, exo.lname }) == 0)
    {
        // Not an update. Insert
        values.put("fname", exo.fname);
        values.put("lname", exo.lname);
        db.insert("Student", null, values);
    }