当前位置: 首页 > 知识库问答 >
问题:

MySqlJava错误:检查正确的语法,以使用附近的'?'在第1行调用时准备语句[重复]

徐洋
2023-03-14

我正试着打电话给我的数据库,但它总是变得奇怪,我不知道为什么。前一次它能工作,下一次我什么都不做,只是重新启动服务器时,它会出现以下错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在“?”附近使用的正确语法在1号线

我已经查看了我在PreparedStatement中提供的id是否为空,是否为空。(这两者都不能是,因为它是一个非空值)在结果集上调用错误(当结果集被执行时)。下面是我用mysql语句尝试的不同方法:

SELECT * FROM registration where `registration_id` > ?
SELECT * FROM registration where registration_id > ?
//what used to work:
SELECT * FROM registration where id > ?

以下是我执行查询的方式:

SQLConnection sqlConnection = new SQLConnection();
            Connection conn = sqlConnection.getConnection();
            String query = "SELECT * FROM registration where `registration_id` > ?";
            try {
                PreparedStatement stmn = conn.prepareStatement(query);
                System.out.println(user.getLastExport());
                stmn.setInt(1, user.getLastExport());
                // execute the query, and get a java resultset
                ResultSet rs = stmn.executeQuery(query);

错误是:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1218)
    at houseoftyping.sql.SQLConnection.fillWorkbookWithLastRegistrations(SQLConnection.java:158)
    at houseoftyping.controller.ExcelController.handleDownload(ExcelController.java:106)
    at houseoftyping.controller.ExcelController.doGet(ExcelController.java:51)
    at houseoftyping.controller.ExcelController.doPost(ExcelController.java:197)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

共有1个答案

沈宏朗
2023-03-14

我知道我做错了什么:

在准备好的声明中,我这样做:

PreparedStatement stmn = conn.prepareStatement(query);

所以这意味着我的查询被加载到准备好的语句中现在我做错了的是我再次将我的查询添加到结果集中,如下所示:

ResultSet rs = stmn.executeQuery(query);

但它需要没有这样的查询:

ResultSet rs = stmn.executeQuery();
 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 我的PDO声明无效 (1个答案) 2年前关闭。 我正在尝试使用PDO准备好的语句为MySQL数据库上的查询创建正确的错误处理。我希望程序在检测到准备好的语句过程中出现错误时退出。利用PDO准备好的语句过程中的每个步骤都会在失败时返回的事实,我将这种令人讨厌的技巧归纳为: 通过执行以下操作: 两件事情。首先,这是非常冗长而愚蠢的。肯定有更好的办法。显然,我

  • 语法中有错误;查看与服务器版本相对应的手册,以了解第1行附近使用的正确语法 当我试图为我的帐单应用程序生成帐单时,上面的错误将会出现。下面是我的应用程序的代码。请给我一些解决这个错误的方法..................

  • 问题内容: 我有一个Java代码: 然后我有SQLException: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在’?’附近使用正确的语法。 问题答案: 您应该执行不带任何参数的,如下所示: 使用参数调用将按原样执行提供的查询(没有绑定参数)。

  • 问题内容: 我正在使用和建立库存系统。查询表时出现此错误。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取在’?’附近使用的正确语法。在第1行 下面是代码 问题答案: ResultSet rsOrders = stmt2.executeQuery(order

  • 当我导入数据库时,我在PHPMyadmin中遇到了一些问题。 您的SQL语法有错误;检查与您的MySQL server版本相对应的手册,以了解在第3行“”附近使用的正确语法(`form_id`varchar(18)COLLATE utf8_general_ci;NOT NULL DEFAULT“,) 有人知道我该怎么解决吗?

  • 问题内容: 消息102,级别15,状态1,第5行’)’附近的语法不正确 这个查询有什么问题,请帮忙。 问题答案: 尝试添加一个表名(例如),如下所示: 如果您不需要嵌套查询,也可以使用以下查询: