【问题标题】:Android sql update or insertAndroid sql更新或插入
【发布时间】:2017-12-29 03:44:09
【问题描述】:

我正在尝试为下一种情况找到最有效的逻辑。

我想在我的 Android 应用上实现以 sql 存储用户最常用的功能/操作。

数据库结构:

| _id | act_name(文本唯一)|计数器(整数)|

代码:(srchttps://stackoverflow.com/a/20568176/8006698)

int rowID = (int) db.insertWithOnConflict(TABLE_NAME, null, cv,SQLiteDatabase.CONFLICT_IGNORE);
if (rowID != -1){
     myLog("Written to base with id = " + rowID);
} else {
     db.execSQL("UPDATE stats SET counter=counter + 1 WHERE act_name = '" + mAction+"'");
     myLog("stats updated");
}

我很惊讶,'execSQL' 不会以'update' 方法返回值。 我会使用:

int rowID = db.update(...);
if (rowID == 0) {   
    //if not updated then insert
    long insertedID = db.insert(...);
    myLog("Inserted to base ");
} else
    myLog("base updated");

但这里不能直接增加计数作为'counter = counter + 1',所以我必须使用'insertWithOnConflict'。 我不确定,使用它是否是一种好习惯。等待你的想法。

【问题讨论】:

  • 所以你要问的只是一种用 'counter += 1' 更新 sql 的方法?

标签: android sql insert


【解决方案1】:

替换这个

 db.execSQL("UPDATE stats SET counter=counter + 1 WHERE act_name = '" + mAction+"'");

使用这个

 ContentValues values=new ContentValues();
 values.put("counter",1)
 int rowCount=db.update("stats",values,"act_name=?",new String[]{mAction}); 

你得到更新计数并做任何你想做的事情。

【讨论】:

  • 如何使用 contentvalues 将 counter 的值增加 1 (++counter)?
  • 在更新查询调用之前,您需要从表中查询计数器并获取计数器和更新值计数器+1。像这样,int counter=//选择你的计数器值,values.put("counter",counter+1);
  • 感谢您的回答!我的研究就像我可以通过使用一个 sql 查询来更新计数器,并从 sql 中获取结果,例如“嘿,我更新了你的基础”))。所以,我仍然找不到比这更优化的逻辑: int rowcount = (int) db.insertWithOnConflict(myTable, null, contentValue, CONFLICT_IGNORE); if (rowCount == -1){ db.execSQL("更新查询...'"); }
猜你喜欢
  • 2011-01-17
  • 2012-10-29
  • 2014-01-03
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多