我有以下SQL查询:SQL查询工作在phpMyAdmin,但没有在Java中
SELECT `Activity`.`userid` , `Goal`.`goalid` , `Goal`.`activityid` , `Goal`.`exercise` , `Exercise`.`name` , `Goal`.`target` , `ActivityData`.`dataid` , `ActivityData`.`current` , MAX(`ActivityData`.`timestamp`) AS `timestamp`
FROM `Goal`
INNER JOIN `Activity` ON `Activity`.`activityid` = `Goal`.`activityid`
INNER JOIN `Exercise` ON `Exercise`.`exerciseid` = `Goal`.`exercise`
INNER JOIN `ActivityData` ON `ActivityData`.`activityid` = `Goal`.`activityid`
WHERE `Activity`.`userid` =100005545413982
GROUP BY `gymbuddy`.`Goal`.`activityid`;
上面的查询工作在phpMyAdmin的,但给我,当我与一个PreparedStatement运行下面的堆栈跟踪。
com.mysql.jdbc.exceptions.jdbc4.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 'BY `gymbuddy`.`Goal`.`activityid`' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
at com.mathanv.gb.dao.BuddyDao.getAllBuddyGoals(BuddyDao.java:387)
at com.mathanv.gb.controller.BuddyController.doPost(BuddyController.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
这些都是DB属性:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:8889/gymbuddy?allowMultiQueries=true
不知道为什么它这样做!帮帮我!
编辑:我正在使用preparedStatement生成用户标识。
WHERE `gymbuddy`.`Activity`.`userid` =?
ps.setLong(1, buddy.getUserID());
编辑:(请求)与PreparedStatement的方法。
public JSONObject getAllBuddyGoals(Buddy buddy){
try {
PreparedStatement ps = connection.prepareStatement(GET_ALL_BUDDY_GOALS);
ps.setLong(1, buddy.getUserID());
JSONObject response = new JSONObject();
response.put("action", "getAllBuddyGoals");
response.put("success", 1);
response.put("error", 0);
response.put("userid", buddy.getUserID());
JSONArray goals = new JSONArray();
ResultSet rs = ps.executeQuery();
while(rs.next()){
JSONObject goal = new JSONObject();
goal.put("goalid", rs.getLong("goalid"));
goal.put("activityid", rs.getLong("activityid"));
goal.put("exercise", rs.getString("name"));
goal.put("target", rs.getDouble("target"));
goal.put("max", rs.getDouble("current"));
goals.add(goal);
}
response.put("goals", goals);
return response;
} catch (SQLException e) {
e.printStackTrace();
}
JSONObject error = new JSONObject();
error.put("action", "getAllBuddyGoals");
error.put("success", 0);
error.put("error", 1);
error.put("error_msg", "error processing request, please contact admin.");
return error;
}
'buddy.getUserID()'返回什么? – cheesemacfly 2013-04-11 16:54:49
例如很长的数字,100005545413982 – MathanMV 2013-04-11 16:55:33
你能告诉我们准备好的语句的整个代码吗? – cheesemacfly 2013-04-11 16:59:18