首页 > 解决方案 > 即使在 java 7 和 gwt sdk 2.6.0 中有多个结果集,CallableStatement 也不返回结果集

问题描述

package com.abc.server;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import com.abc.client.modules.beans.AdminBean;
import com.abc.client.modules.beans.ResponseBean;
import com.abc.client.modules.utils.DBPool;

public class AdminServerService {
    private Connection con = null;
    private DBPool dbPool = new DBPool();

    public ResponseBean getAllGroupDetails(int pageSize, int pageNumber) {
        ResponseBean dataSet = new ResponseBean();
        List<AdminBean> groupDetailsList = new ArrayList<AdminBean>();
        ResultSet rs = null;
        InputStream in;
        CallableStatement cstmt = null;
        String driverClass,url = null, username = null,password = null;

        try {
            in = new FileInputStream("C:\\Users\\vchag\\Desktop\\jdbc.properties");

            Properties prop     = new Properties();
            prop.load(in);

            driverClass = prop.getProperty("SQLJDBC.driver");
            url = prop.getProperty("SQLJDBC.url");
            username = prop.getProperty("SQLJDBC.username");
            password = prop.getProperty("SQLJDBC.password");

            in.close();

            Class.forName(driverClass);
            con = DriverManager.getConnection(url, username, password);         
            cstmt = con.prepareCall(stored procedure name,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            cstmt.setInt("LOGIN_USER_ID",10);

            boolean isResultsAvailable = cstmt.execute();
            int resultSet = 1;

            // Loop through the available result sets.
            while (isResultsAvailable) {
                rs = cstmt.getResultSet();

                if (rs != null) {
                    if (resultSet == 1) {
                        while (rs.next()) {

                            AdminBean result = new AdminBean();
                            result.setGroupId(rs.getInt(1));
                            result.setGroupName(rs.getString(2));

                            groupDetailsList.add(result);
                        }
                        dataSet.setGridData(groupDetailsList);
                    }
                }

                rs.close();
                isResultsAvailable = cstmt.getMoreResults();
                resultSet++;
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            dbPool.closeAll(rs, cstmt, con);
        }
        return dataSet;
    }
}

我想遍历从存储过程返回的多个结果集。当我使用应用程序调用该过程时,即使结果集可用,cstmt.execute它也总是返回。false我正在使用 java 7 和 smartgwt 2.6.0 sdk。当我在独立应用程序中运行相同的代码时,它工作正常,但在我的应用程序中不起作用。

标签: javajdbcsql-server-2014smartgwt

解决方案


推荐阅读