MySql Java错误:请检查使用near';的正确语法';调用PreparedStatement时在第1行
我试着打电话给我的数据库,但它总是变得奇怪,我不知道为什么。 一次正常工作,下一次我除了重新启动服务器外什么都不做更改时,会出现以下错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“?”附近使用的正确语法 我已经查看了我在PreparedStatement中提供的id是否不为空,也不为空。(由于它是非空值,因此不能为或) 在结果集上调用错误(当执行结果集时) 下面是我在mysql语句中尝试的不同内容:MySql Java错误:请检查使用near';的正确语法';调用PreparedStatement时在第1行,java,mysql,jdbc,Java,Mysql,Jdbc,我试着打电话给我的数据库,但它总是变得奇怪,我不知道为什么。 一次正常工作,下一次我除了重新启动服务器外什么都不做更改时,会出现以下错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“?”附近使用的正确语法 我已经查看了我在PreparedStatement中提供的id是否不为空,也不为空。(由于它是非空值,因此不能为或) 在结果集上调用错误(当执行结果集时) 下面是我在mysql语句中尝试的不同内容: SELECT * FROM registration wher
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)
我知道我做错了什么: 在准备好的声明中,我这样做:
PreparedStatement stmn = conn.prepareStatement(query);
这意味着我的查询被加载到准备好的语句中
现在我做错了,我再次将我的查询添加到结果集中,如下所示:
ResultSet rs = stmn.executeQuery(query);
但它必须没有这样的查询:
ResultSet rs = stmn.executeQuery();