Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL查询在MySql工作台中执行,但不在生产环境中执行_Java_Mysql_Glassfish_Amazon Rds - Fatal编程技术网

Java SQL查询在MySql工作台中执行,但不在生产环境中执行

Java SQL查询在MySql工作台中执行,但不在生产环境中执行,java,mysql,glassfish,amazon-rds,Java,Mysql,Glassfish,Amazon Rds,有问题的SQL查询: 选择COUNTsuggestedfood.id作为num_same,suggestedfood.place_id FROM suggestedfood WHERE suggestedfood.group_id=?和建议的食物。选定=?和建议的食物。删除=?按建议食物分组。地点\ id限制1 此查询可以在MySQL Workbench中运行,但在生产中会引发以下错误: 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“”的正确语法?和建议的食物。

有问题的SQL查询:

选择COUNTsuggestedfood.id作为num_same,suggestedfood.place_id FROM suggestedfood WHERE suggestedfood.group_id=?和建议的食物。选定=?和建议的食物。删除=?按建议食物分组。地点\ id限制1

此查询可以在MySQL Workbench中运行,但在生产中会引发以下错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“”的正确语法?和建议的食物。选定=?和建议的食物。删除=?在第1行按建议的“foo”分组

MySQL错误代码:1064

MySQL状态:42000

MySQL服务器在AWS RDS上,如果这有帮助的话,我运行SQL查询的代码是Glassfish上的Java容器。还有很多其他的查询可以运行,只是这一个给我带来了麻烦

如果有人能指出我的一个简单错误,那就太好了。或者,如果有人知道我如何更好地诊断这个问题,那将不胜感激

编辑,这是我的Java代码,因为请求组id是一个很长的过程

以下是完整的堆栈跟踪:

 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: 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 '? AND suggestedfood.selected=? AND suggestedfood.Removed=? GROUP BY suggestedfoo' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232)
at com.cow10.endpoints.FoodSessionHandler.togglePlace(FoodSessionHandler.java:607)
at com.cow10.endpoints.FoodSessionHandler$Proxy$_$$_WeldClientProxy.togglePlace(Unknown Source)
at com.cow10.endpoints.FoodWebSocket.handleMessage(FoodWebSocket.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:477)
at org.glassfish.tyrus.core.AnnotatedEndpoint.access$100(AnnotatedEndpoint.java:87)
at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:573)
at org.glassfish.tyrus.core.TyrusSession.notifyMessageHandlers(TyrusSession.java:542)
at org.glassfish.tyrus.core.TyrusEndpointWrapper.onMessage(TyrusEndpointWrapper.java:748)
at org.glassfish.tyrus.core.TyrusWebSocket.onMessage(TyrusWebSocket.java:200)
at org.glassfish.tyrus.core.frame.TextFrame.respond(TextFrame.java:135)
at org.glassfish.tyrus.core.ProtocolHandler.process(ProtocolHandler.java:622)
at org.glassfish.tyrus.core.TyrusWebSocketEngine$TyrusReadHandler.handle(TyrusWebSocketEngine.java:394)
at org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler.onDataAvailable(TyrusHttpUpgradeHandler.java:164)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.processDataAvailable(InputBuffer.java:488)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.onDataAvailable(InputBuffer.java:453)
at org.glassfish.grizzly.http.io.InputBuffer.invokeHandler(InputBuffer.java:1101)
at org.glassfish.grizzly.http.io.InputBuffer.invokeHandlerOnProperThread(InputBuffer.java:1092)
at org.glassfish.grizzly.http.io.InputBuffer.append(InputBuffer.java:975)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:271)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:748)]]
问号?在该声明的上下文中无效;MySQL不将其视为数字文本、字符串文本或有效引用

运行以下简单查询可能会导致相同的错误:

SELECT 'abc', 2, ?, NOW()
MySQL返回以下错误:

Error Code: 1064
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 '?, NOW()' at line 1
该问号字符可能是绑定变量的占位符。没有看到实际的代码,我们只是猜测。。。我们希望看到SQL文本作为参数传递给prepareStatement,然后在执行之前调用适当的方法将变量绑定到占位符,例如

  PreparedSatement ps = con.prepareStatement(sqltext);
  ps.setInt(1,groupId);
  ps.setInt(2,selected);
  ps.setInt(3,removed);
编辑


这个答案是在OP在问题中添加Java代码之前发布的。正如Joop Eggen的回答所指出的,在现在提供的OP代码中,这是一个简单的问题。。。executeQuery方法中提供的参数。对于准备好的语句,不要这样做。

尝试在=和?之间添加空格

String count = "SELECT COUNT(" + SUGGESTEDFOOD_ID + ") AS num_same, " 
     + SUGGESTEDFOOD_PLACEID + " FROM " + SUGGESTEDFOOD
     + " WHERE " + SUGGESTEDFOOD_GROUP_ID + "= ? AND "
     + SUGGESTEDFOOD_SELECTED + "= ? AND "
     + SUGGESTEDFOOD_REMOVED + "= ? "
     + "GROUP BY "
     + SUGGESTEDFOOD_PLACEID  + " LIMIT 1";
一个典型的错误

ResultSet rs = ps.executeQuery(count);
应该是

ResultSet rs = ps.executeQuery();
因为ps是一个PreparedStatement扩展语句,executeQueryString是一个不可用的语句方法


是否应该创建一个类似的API,重写executeQueryString并使用一个好的javadoc将其@Deprecated。

您在哪里设置了参数?您很可能执行了错误的查询,即您的Java代码有缺陷,因此如果您需要我们的帮助,您需要1显示代码,和2显示错误的完整stacktrace。执行代码时,问号不在那里,因为我使用的是准备好的语句,所以在打印未准备好的语句时,该代码正好位于调试语句中。
ResultSet rs = ps.executeQuery();