这是报错信息 提示的是sql语句有问题: java.sql.SQLException: You have an error in your SQL syntax; check the manual th at corresponds to your MySQL server version for the right syntax to use near 'UP DATE scorelist SET rank= (@mycnt := @mycnt + 1) ORDER BY score DESC' at line 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) at com.mysql.jdbc.Connection.execSQL(Connection.java:2994) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja va:936) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java: 1030) at com.single.dao.ScoreDao.Rank(ScoreDao.java:174) at com.single.manager.ScoreManager.updateScore(ScoreManager.java:42) at com.single.servlet.RecordScoreServlet.doPost(RecordScoreServlet.java: 52) at com.single.servlet.RecordScoreServlet.doGet(RecordScoreServlet.java:2 5) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica torBase.java:498) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:394) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso r.java:284) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr ocess(Http11AprProtocol.java:322) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin t.java:1714) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source ) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
这是报错信息 提示的是sql语句有问题: java.sql.SQLException: You have an error in your SQL syntax; check the manual th at corresponds to your MySQL server version for the right syntax to use near 'UP DATE scorelist SET rank= (@mycnt := @mycnt + 1) ORDER BY score DESC' at line 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) at com.mysql.jdbc.Connection.execSQL(Connection.java:2994) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja va:936) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java: 1030)
update scorelist a,(select score,(select count(*) from scorelist where score<=b.score) as r from scorelist b) c set a.rank=c.r where a.score=c.score
老大的方法在mysql可以运行 完全没问题可以在java中报错:请老大看看 谢谢java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at com.mysql.jdbc.Statement.checkForDml(Statement.java:298) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:956) at com.single.dao.ScoreDao.Rank(ScoreDao.java:174) at com.single.manager.ScoreManager.updateScore(ScoreManager.java:47)我的方法是这样写的---------------------------------- public static ResultSet Rank(Connection con){ StringBuffer sb = new StringBuffer(" update scorelist a,(select score,(select count(*) from scorelist where score>=b.score) as r from scorelist b) cset a.rank=c.rwhere a.score=c.score" ); try { PreparedStatement pstmt = con.prepareStatement(sb.toString()); return pstmt.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return null; } 这是调用方法:--------------------------------------------- public String updateScore(Player player) { ResultSet rs = ScoreDao.ScoreList1(con, player); JSONArray jsonArray = JsonUtil.formatRsToJsonArray(rs); JSONObject json = getDBPlayer(player, jsonArray); if (json == null) { ScoreDao.PlayerAdd(con, player); System.out.println("新用户...第一次录入积分"); } else { ScoreDao.PlayerUpdate(con, player); System.out.println("已经上传过积分...覆盖上次积分"); json.getString("score"); } ScoreDao.Rank(con); //在这调用方法 System.out.println("排名已更新"); return "success"; }
java.sql.SQLException: You have an error in your SQL syntax; check the manual th
at corresponds to your MySQL server version for the right syntax to use near 'UP
DATE scorelist SET rank= (@mycnt := @mycnt + 1) ORDER BY score DESC' at line 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:936)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
1030)
at com.single.dao.ScoreDao.Rank(ScoreDao.java:174)
at com.single.manager.ScoreManager.updateScore(ScoreManager.java:42)
at com.single.servlet.RecordScoreServlet.doPost(RecordScoreServlet.java:
52)
at com.single.servlet.RecordScoreServlet.doGet(RecordScoreServlet.java:2
5)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:394)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso
r.java:284)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr
ocess(Http11AprProtocol.java:322)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin
t.java:1714)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这是报错信息 提示的是sql语句有问题:
java.sql.SQLException: You have an error in your SQL syntax; check the manual th
at corresponds to your MySQL server version for the right syntax to use near 'UP
DATE scorelist SET rank= (@mycnt := @mycnt + 1) ORDER BY score DESC' at line 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:936)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
1030)
set a.rank=c.r
where a.score=c.score
老大的方法在mysql可以运行 完全没问题可以在java中报错:请老大看看 谢谢java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.Statement.checkForDml(Statement.java:298)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:956)
at com.single.dao.ScoreDao.Rank(ScoreDao.java:174)
at com.single.manager.ScoreManager.updateScore(ScoreManager.java:47)我的方法是这样写的----------------------------------
public static ResultSet Rank(Connection con){
StringBuffer sb = new StringBuffer(" update scorelist a,(select score,(select count(*) from scorelist where score>=b.score) as r from scorelist b) cset a.rank=c.rwhere a.score=c.score" );
try {
PreparedStatement pstmt = con.prepareStatement(sb.toString());
return pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
这是调用方法:---------------------------------------------
public String updateScore(Player player) {
ResultSet rs = ScoreDao.ScoreList1(con, player);
JSONArray jsonArray = JsonUtil.formatRsToJsonArray(rs);
JSONObject json = getDBPlayer(player, jsonArray);
if (json == null) {
ScoreDao.PlayerAdd(con, player);
System.out.println("新用户...第一次录入积分");
} else {
ScoreDao.PlayerUpdate(con, player);
System.out.println("已经上传过积分...覆盖上次积分");
json.getString("score");
}
ScoreDao.Rank(con); //在这调用方法
System.out.println("排名已更新");
return "success";
}
上面给出了java代码
没有出现乱码 就是运行到 这个方法的时候报错了 好像是不支持这样的写法