首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite-JDBC update with LIMIT子句?

问Sqlite-JDBC update with LIMIT子句?
EN

Stack Overflow用户
提问于 2020-05-15 10:16:48
回答 1查看 136关注 0票数 0

我正在尝试通过sqlite-JDBC使用带有LIMIT子句的update查询。

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

示例代码:

代码语言:javascript
复制
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();
}

我得到一个错误:

代码语言:javascript
复制
org.sql2o.Sql2oException: Error preparing statement - [SQLITE_ERROR] SQL error or missing database (near "limit": syntax error)

使用sqlite-jdbc 3.31

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

旗帜:

代码语言:javascript
复制
SQLITE_ENABLE_UPDATE_DELETE_LIMIT

需要设置才能使limit子句与update查询一起工作。

我知道SELECT方法适用于LIMIT子句,但是我需要两个查询来完成这个任务: SELECT然后UPDATE。

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

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

感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 21:12:26

您可以尝试执行以下查询:

代码语言:javascript
复制
UPDATE mytable SET user = :name1
 WHERE ROWID = (SELECT MIN(ROWID) 
                  FROM mytable
                 WHERE user = :name2);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61810617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档