ExecuteQuery 返回 null 而 execute 语句返回 true

这是我尝试从 DB 获取 ResultSet 的 java 代码。


    try{


        ps=conn.prepareStatement(QueryMapper.SCHEDULE_APPLICANT_STATUS);

        ps.setString(1,schedule_id);

        rs1=ps.execute();

        System.out.println(rs1);

        ResultSet rs = null;

        while(rs1)

        {

            rs=ps.executeQuery();

            System.out.println(rs.next());

            Application applicationBean= new Application();

            System.out.println("ABC"+schedule_id);

            applicationBean.setScheduledProgramId(rs.getString(3)); 

            applicationBean.setStatus(rs.getString(2)); 

            applicationBean.setApplicantId(rs.getString(1)); 

            applicationList.add(applicationBean);

            applicationCount++;

        }


    }catch (SQLException sqlException) {

        log.error(sqlException.getMessage());

        System.out.println(sqlException.getMessage());

    }

当我尝试运行它时,我无法在 rs usingexecuteQuery语句中获取结果集。当我尝试执行 usingexecute语句时,它返回了true这意味着返回了一些结果集。为什么我的executeQuery返回为空。


我试图运行的 sql 查询是


SELECT * FROM APPLICATION WHERE SCHEDULED_PROGRAM_ID=?


此查询运行良好并在 sql 管理器中执行时获取结果。


你能告诉我哪里做错了。


一只名叫tom的猫
浏览 698回答 3
3回答

素胚勾勒不出你

在所示的代码中,rs只能为nullifrs1为假,只有在您执行不产生结果集的事情时才会出现这种情况(或者如果您的 JDBC 驱动程序有错误,但可能性较小)。不过,你在做什么,毫无意义。如果使用execute(),则不应再次执行查询来获取结果集。这样做效率低下,因为您要求数据库服务器重做它为您所做的第一个工作execute(),请getResultSet()改用。如记录在PreparedStatement.execute():该execute方法返回 aboolean以指示第一个结果的形式。您必须调用方法getResultSet或 getUpdateCount检索结果;您必须调用 getMoreResults以移动到任何后续结果。但是,如果您知道您正在执行一个生成结果集的查询(并且选择总是生成一个结果集,即使它是空的!),那么您应该使用executeQuery(). 这简化了您的代码。您的代码也有一个无限循环。你的意思是用if (rs1)而不是while(rs1)吗?您应该将代码更改为类似try (PreparedStatement ps=conn.prepareStatement(QueryMapper.SCHEDULE_APPLICANT_STATUS)) {    ps.setString(1,schedule_id);    try (ResultSet rs = ps.executeQuery()) {        // or maybe if (rs.next())?        while (rs.next()) {             Application applicationBean= new Application();            System.out.println("ABC"+schedule_id);            applicationBean.setScheduledProgramId(rs.getString(3));             applicationBean.setStatus(rs.getString(2));             applicationBean.setApplicantId(rs.getString(1));             applicationList.add(applicationBean);            applicationCount++;        }    }} catch (SQLException sqlException) {    log.error(sqlException.getMessage());    System.out.println(sqlException.getMessage());}

宝慕林4294392

您不需要两个 ResultSet 对象,您只需要执行 PreparedStatement 一次。典型的模式是:rs = ps.executeQuery();while (rs.next()) {    // process the row returned by next()    // e.g.,    System.out.println(rs.getString(1));}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java