ResultSet来自UPDATE。没有数据

时间:2017-05-17 21:56:17

标签: java mysql sql jdbc

当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。没有数据。

3 个答案:

答案 0 :(得分:1)

这是不可能的,您必须将您的查询分开,以获得可以使用程序或功能的最佳解决方案。

  1. 程序应采用lectureID
  2. 返回你的结果,在你的情况下它应该乘以valus,你可以阅读How to retrieve multiple rows from stored procedure in mysql?以了解如何使用程序返回多个值

答案 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(),因为如果你不需要提前知道存储过程返回结果集。

希望这有帮助!