【问题标题】:Sqlite-JDBC update with LIMIT clause?带有 LIMIT 子句的 Sqlite-JDBC 更新?
【发布时间】:2020-08-31 18:29:15
【问题描述】:

我正在尝试使用 sqlite-JDBC 使用带有 LIMIT 子句的更新查询。

假设表中有 100 个 bob,但我只想更新其中一条记录。

示例代码:

String name1 = "bob";
String name2 = "alice";

String updateSql = "update mytable set user = :name1 " + 
            "where user is :name2  " + 
            "limit 1";


try (Connection con = sql2o.open()) {
    con.createQuery(updateSql)
        .addParameter("bob", name1)
        .addParameter("alice", name2)
        .executeUpdate();
} catch(Exception e) {
    e.printStackTrace();
}

我收到一个错误:

org.sql2o.Sql2oException: Error preparing statement - [SQLITE_ERROR] SQL error or missing database (near "limit": syntax error)

使用 sqlite-jdbc 3.31

sql2o 1.6(简易数据库查询库)

国旗:

SQLITE_ENABLE_UPDATE_DELETE_LIMIT

需要设置以使限制子句与更新查询一起使用。

我知道 SELECT 方法适用于 LIMIT 子句,但我需要 2 个查询来完成此任务;选择然后更新。

如果没有办法让 LIMIT 与 UPDATE 一起工作,那么我将使用稍微有点混乱的方法来进行查询和子查询来让事情正常工作。

也许有一种方法可以让 sqlite-JDBC 使用集成引擎之外的外部 sqlite 引擎,该引擎已使用标志集进行编译。

任何帮助表示赞赏。

【问题讨论】:

  • 一般来说,LIMIT 没有ORDER BY 是没有意义的。确定哪条条记录被更新的逻辑是什么?
  • @TimBiegeleisen 尝试了 {ORDER BY LIMIT 1} 和 {LIMIT 1}。它们都不起作用。
  • 请将示例数据添加到您的问题中,以显示您在此处尝试执行的操作。我觉得主要问题是 SQL,而不是 Java。
  • 这个问题需要详细或清晰。
  • @TimBiegeleisen 好的,为了更清晰,更新了标题和帖子。感谢您的建议。

标签: java sqlitejdbc sql2o


【解决方案1】:

你可以试试这个查询:

UPDATE mytable SET user = :name1
 WHERE ROWID = (SELECT MIN(ROWID) 
                  FROM mytable
                 WHERE user = :name2);

ROWID 是所有表中都可用的特殊列(除非您使用 WITHOUT ROWID)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2012-11-30
    • 2015-12-18
    • 2018-12-02
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多