You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Statement执行MySQL语句时出现1064语法错误排查求助

聊聊你的服务器数据库查询逻辑

看起来你已经搭建了一个能接收客户端查询、并转发到数据库的服务器,而且从DA2的打印结果来看,数据库连接这块已经跑通了,这很棒!

先把你给出的核心代码贴出来方便分析:

try{
    connection = dbConnection.getDbConnection();
    if(connection != null) {
        System.out.println("DA2");
        Statement mySt = connection.createStatement();
        if(mySt != null) {
            ResultSet myRs = mySt.executeQuery(query);
            System.out.println("DA3");
            while(myRs.next()){
                //获取并打印数据
            }
        }
    }
}
// 注:你这段代码没写完try-catch的闭合部分,实际运行记得补上异常捕获哦

这里有几个需要留意的地方,帮你排查后续可能出现的问题:

  • Statement创建的校验缺失:现在代码里只判断了mySt != null,但如果创建失败,程序会直接跳过查询逻辑,你连个提示都没有。建议在这里加个日志,比如System.out.println("Statement 创建成功/失败"),这样出问题时能快速定位到是Statement的问题还是查询的问题。
  • 查询执行的排查点:如果没看到DA3打印,那肯定是executeQuery(query)这一步出问题了。大概率是客户端传过来的query有问题——可能是SQL语法错误,或者参数格式不对。这时候你可以在服务器端先把收到的query完整打印出来,然后复制到数据库客户端(比如MySQL Workbench)里直接执行,看能不能拿到结果,这样就能快速区分是客户端传参的问题还是服务器执行的问题。
  • 资源泄漏的隐患:你现在的代码没有关闭Connection、Statement、ResultSet这些数据库资源的逻辑,长时间运行会导致连接池耗尽,服务器直接崩掉。推荐用Java的try-with-resources语法,它会自动帮你关闭资源,写法更简洁安全:
try (Connection connection = dbConnection.getDbConnection();
     Statement mySt = connection.createStatement();
     ResultSet myRs = mySt.executeQuery(query)) {
    System.out.println("DA2");
    System.out.println("DA3");
    while(myRs.next()){
        // 获取并打印数据
    }
} catch (SQLException e) {
    e.printStackTrace(); // 捕获异常并打印栈信息,排查问题更高效
}

另外你提到查询语句是客户端通过Data...的方式发送的,要是客户端那边的传输逻辑有问题(比如字符串截断、编码不统一),也会导致服务器收到的query是错的。所以在服务器接收完query之后,先把完整内容打印出来,确认和客户端发送的一致,这也是个很重要的排查步骤。

内容的提问来源于stack exchange,提问作者Cioby Andrei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:26:24