0

我正在尝试使用 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 引擎,该引擎已使用标志集进行编译。

任何帮助表示赞赏。

4

1 回答 1

1

你可以试试这个查询:

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

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

于 2020-05-22T13:12:26.217 回答