当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。没有数据。
答案 0 :(得分:1)
这是不可能的,您必须将您的查询分开,以获得可以使用程序或功能的最佳解决方案。
lectureID
答案 1 :(得分:0)
我不熟悉JDBC,但快速搜索建议您使用execute
而不是executeQuery
。
execute:如果查询返回的第一个对象是a,则返回true ResultSet对象。如果查询可以返回一个或,则使用此方法 更多ResultSet对象。检索从中返回的ResultSet对象 通过重复调用Statement.getResultSet。
来进行查询
https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html#executing_queries
答案 2 :(得分:0)
请查看以下documentation,其解释为使用execute()
代替executeQuery()
,然后在您获得的结果集上触发getResultSet()
。
整个方法是将您的查询更改为存储过程,并通过CallableStatement
调用该文件。
文档建议:
虽然CallableStatement支持调用任何Statement执行方法(executeUpdate(),executeQuery()或execute()),但最灵活的调用方法是execute(),因为如果你不需要提前知道存储过程返回结果集。
希望这有帮助!