首页 > 解决方案 > 执行准备语句时出现 java.sql.SQLSyntaxErrorException

问题描述

我试图运行preparedStatement ps以检查数据是否存在于数据库中。然后它将运行更新(如果存在)或插入(如果不存在)。但是,我收到语法错误

java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'order WHERE date = '2019-05-22'' 附近使用正确的语法

我无法发现错误在哪里。任何人都可以帮忙吗?

PreparedStatement ps,ps1;
        ps =con.prepareStatement("Select 1 from order WHERE date = ?");
        ps.setString(1, date);
        ResultSet rsOrder=ps.executeQuery();  
        if(rsOrder.next()) {  
            System.out.println("reOrder:  true");
            ps1 = con.prepareStatement("UPDATE order SET result = ?  WHERE date = ?");
            ps1.setString(1, json);
            ps1.setString(2, date);
            int rs=ps1.executeUpdate();

        }else {
            System.out.println("reOrder:  false");
            ps1 = con.prepareStatement("INSERT INTO order (date,result) VALUES (?,?)");
            ps1.setString(1, date);
            ps1.setString(2, json);
            int rs=ps1.executeUpdate();
        }

标签: javamysqlsyntax-error

解决方案


order是 MySQL 中的保留字。所以它不会允许,没有转义保留字。

您可以通过在关键字周围添加 ` 来转义它:

Select 1 from `order` WHERE date = ?

UPDATE `order` SET result = ? WHERE date = ?

INSERT INTO `order` (date, result) VALUES (?, ?)

推荐阅读