【问题标题】:UcanaccessSQLException: unexpected token: ORDERUcanaccessSQLException:意外令牌:ORDER
【发布时间】:2015-07-18 20:07:11
【问题描述】:

我正在使用 PHPMyAdmin 在 Java 和 MySQL 中制作一个小应用程序,一切运行良好,但我的教授说我们必须在 Access 中使用数据库,所以我只是更改了我的类连接并导入了我的数据库。 INSERTSELECT 和其他 UPDATE 语句运行良好,但该语句无法运行。

UPDATE table SET col1=?, col2=? WHERE col0=? ORDER BY col4 DESC LIMIT 1

我不明白它如何在 MySQL 中运行良好,但在 UCanAccess 中它不起作用。

【问题讨论】:

  • 在这里我不明白你想做什么。您是否尝试更新或选择行?
  • 你能分享至少一小段代码吗?
  • 这句话基本上更新了一条记录,但是这条记录必须是这条记录的最后一条记录,是一个app,用于登记一个办公室员工的进出,app创建记录的时候员工离开时输入并更新
  • 请参考stackoverflow.com/questions/9080403/… 的答案,让您对自己想要做什么有所了解。
  • 是的,这段代码给了我一个想法,但这段代码是针对 2 个表的,而我的代码是针对一个表的。如果能给我一个例子,我会很高兴的......

标签: java mysql jdbc ucanaccess


【解决方案1】:

我不明白它如何在 MySQL 中运行良好,但在 UCanAccess 中它不起作用。

这是因为不同的数据库软件生产商已经自行以稍微不同的方式实现 SQL 语言,因此不能保证为 MySQL 编写的给定 SQL 语句在 Access、Microsoft SQL Server 或 Oracle 下工作,或任何其他 SQL 的“方言”。

UCanAccess 非常努力地遵循 Access SQL 语法。 Access SQL 使用TOP n 而不是LIMIT n,但Access SQL 也不允许在UPDATE 查询的主要部分使用TOP nORDER BY。所以需要使用子查询来识别要更新的行的主键值。

例如,如果您的表有一个名为“id”的主键列,那么您可以这样做

sql = 
        "UPDATE table1 SET col1=?, col2=? " +
        "WHERE id IN ( " +
            "SELECT TOP 1 id " +
            "FROM table1 " +
            "WHERE col0=? " +
            "ORDER BY col4 DESC, id " +
        ")";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2014-11-29
    • 2018-11-19
    • 2017-04-17
    • 2019-05-26
    • 2014-02-19
    相关资源
    最近更新 更多