【问题标题】:Android Sqlite update first row onlyAndroid Sqlite 仅更新第一行
【发布时间】:2020-01-25 10:27:00
【问题描述】:

我只需要更新特定 sql 查询命令的第一行

我的代码是:

SQLiteDatabase db = this.getWritableDatabase();
    String strSQL = "UPDATE table SET column = something WHERE  name = john AND age = 10";
    db.execSQL(strSQL);

我有 5 个结果与 name=john 和 10 岁的条件相同

这可以更新最后一项,但是我希望它仅更新 WHERE 子句的第一行结果。这怎么可能?

【问题讨论】:

  • 最好使用唯一的列来识别您的用户,并且更新第一项 cursor.moveToFirst(); 应该可以工作
  • 我已经为每个用户提供了唯一的 ID,但我只是在我的问题中提供了一个示例。难道没有一种方法可以从单行更新行而不是创建游标并更新第一行吗?
  • 然后像答案说的那样使用限制
  • 不工作...
  • 不要写原始查询,使用limit找到项目,然后使用yourdb.update(tablename,contentvalues,where,whereargs[])这样更新stackoverflow.com/a/9798527/8528047

标签: java android sql android-sqlite


【解决方案1】:

试试这个:

String strSQL = "UPDATE table SET column = something WHERE id IN (SELECT id FROM table WHERE name = john AND age = 10 LIMIT 1)";

【讨论】:

  • android.database.sqlite.SQLiteException:接近“LIMIT”:语法错误(代码 1):
  • 在 sqlite 中使用 LIMIT 和 UPDATE 需要创建 sqlite3.c 合并的自定义版本(将 --enable-update-limit 传递给 sqlite3-src-XXXXXX.zip 分发中的配置脚本),并在打开特定选项(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)的情况下编译它,顺便说一句。可能不是给定 android 的选项。
  • @MoDev 我已经修改了我的答案
  • 不要写原始查询,使用limit找到项目,然后使用yourdb.update(tablename,contentvalues,where,whereargs[])这样更新stackoverflow.com/a/9798527/8528047
  • 我相信它有效!但是我有另一个问题阻止应用更改。感谢您的解决方案。
【解决方案2】:

提供的id是一个PK,试试

UPDATE table 
SET column = something 
WHERE id = (SELECT min(t2.id) 
            FROM table t2 
            WHERE t2.name = 'john' AND t2.age = 10)

【讨论】:

    【解决方案3】:

    第一: (在你的情况下)如果你只想更新第一行,那么在你的表中再添加一个参数。它将帮助您找到唯一的记录

    第二: 不要使用这样的更新查询

        String strSQL = "UPDATE table SET column = something WHERE  name = john AND age = 10";
    

    改为like this

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多