当executeQuery函数运行时,该sql语句正确工作,并在sql编辑器上运行时给出正确的结果。当它在jdbc上运行时,它不会被执行。该连接接受多个查询。
String query = "set @countOfLectureGrade = (SELECT Count(goc.Affect) FROM GradeOfCourse goc WHERE goc.LectureID = ?);"
+ "SELECT u.SchoolID, u.Name, u.Surname, u.Role, u.Email, "
+ "CASE WHEN @countOfLecture = 0 then 0 "
+ "ELSE AVG(0.01 * goc.Affect * gos.Grade) "
+ "END AS Average "
+ "FROM GradeOfCourse goc, GradeOfStudent gos, User u, CourseOfStudent cos "
+ "WHERE "
+ "(gos.CourseGradeID = goc.GradeID AND u.SchoolID = gos.StudentID AND goc.LectureID = ?) "
+ "OR (u.SchoolID = cos.SchoolID AND cos.LectureID = ? AND @countOfLectureGrade = 0) "
+ "GROUP BY u.SchoolID;";
try {
connection = super.getConnection();
PreparedStatement sqlStatement = connection.prepareStatement(query);
sqlStatement.setInt(1, lectureID);
sqlStatement.setInt(2, lectureID);
sqlStatement.setInt(3, lectureID);
ResultSet resultSet = sqlStatement.executeQuery();java.sql.SQLException: ResultSet来自UPDATE。没有数据。
发布于 2017-05-17 22:06:40
这是不可能的,你必须分开你的查询,为了最好的解决方案,你可以使用的过程或功能。
lectureID发布于 2017-05-17 22:07:59
我不熟悉JDBC,但快速搜索表明您应该使用execute而不是executeQuery。
如果查询返回的第一个对象是ResultSet对象,则返回true。如果查询可以返回一个或多个ResultSet对象,则使用此方法。通过反复调用ResultSet检索从查询返回的Statement.getResultSet对象。
发布于 2017-05-18 07:39:35
看看下面的文档,它解释了如何使用execute()而不是executeQuery(),然后在得到的结果集上触发getResultSet()。
整个方法是将查询更改为存储过程,并通过CallableStatement调用该过程。
文件表明:
尽管CallableStatement支持调用任何语句执行方法(executeUpdate()、executeQuery()或execute()),但调用的最灵活的方法是execute(),因为如果存储过程返回结果集,您不需要提前知道。
希望这能有所帮助!
https://stackoverflow.com/questions/44035396
复制相似问题