0

こんにちは、2 か所からデータを取得しようとしています。1 つはデータベースから、2 番目はクラス ファイルから。データを取得した後、return キーワードを使用して両方の ResultSet オブジェクトを他のファイルに返したいのですが、2 つの結果セットを返す方法がわかりません。

私のコード:

public ResultSet getdata(String query, boolean test, List<CartEntry> items)
    {
        int k;
            try
            {
                Connection conn;
                Statement st;
                public ResultSet rs,result;
                List<Product> prodList = new ArrayList<Product>();
                for(CartEntry ce : items)
                {
                    prodList.add(new Product("p" + ce.getpId(), "test", "prod" + ce.getpId(), (int)ce.getpId(), ce.getpId() + 0.12f, ce.getQuantity()));
                    result = new DummyResultSet(prodList);
                    k = ce.getQuantity();
                    System.out.println(k);
                }

                st=conn.createStatement();
                rs=st.executeQuery(query);          
                querystatus=true;
                return rs;
            }
            catch(Exception e)
            {
                querystatus=false;
            }
        }

try ブロックの最後の行、つまりreturn rs;次のようなものが欲しいのですreturn rs,result;が、それを実装する方法がわかりません。そのように単純に試してみましたが、機能せず、エラーが発生します。誰でもデータを他のファイルに返す方法とそれを取得する方法を考えていますか??

4

4 に答える 4

2

他の人がその方法を教えてくれたので、これを行うべきではないことを説明する私の答えを追加します.

基本的に結果セットを返すべきではありません。それらは答えを消費するためのものです。代わりに、結果セットを読み込んで、結果をどこかに保存し (値オブジェクトの配列など)、結果を解放する必要があります。そうしないと、データベース接続が簡単にリークしてしまいます。

于 2013-11-12T06:48:59.900 に答える
1

コードを変更します。

public ArrayList getdata(String query, boolean test, List<CartEntry> items)
    {
ArrayList arr = new ArrayList();// This is a ArrayList
        int k;
            try
            {
                Connection conn;
                Statement st;
                public ResultSet rs,result;
                List<Product> prodList = new ArrayList<Product>();
                for(CartEntry ce : items)
                {
                    prodList.add(new Product("p" + ce.getpId(), "test", "prod" + ce.getpId(), (int)ce.getpId(), ce.getpId() + 0.12f, ce.getQuantity()));
                    result = new DummyResultSet(prodList);
                    k = ce.getQuantity();
                    System.out.println(k);
                }

                st=conn.createStatement();
                rs=st.executeQuery(query);          
                querystatus=true;
arr.add(rs);// Add it to list
arr.add(result);
                return arr; // Return the List
            }
            catch(Exception e)
            {
                querystatus=false;
            }
        }

受信機能でこれを行います:-

 ArrayList arr = getdata(query, test,items);


        ResultSet rs = (ResultSet)arr.get(0);
        ResultSet result = (ResultSet)arr.get(1);
于 2013-11-12T06:46:10.927 に答える
0

ResultSetarray またはを使用ResultSet Listして、複数の を返すことができますResultSet。を使用した次の例を見てくださいResultSet[]

public ResultSet[] getdata(String query, boolean test, List<CartEntry> items)
{
    int k;
        try
        {
            Connection conn;
            Statement st;
            ResultSet[] rs=new ResultSet[2];
            List<Product> prodList = new ArrayList<Product>();
            for(CartEntry ce : items)
            {
                prodList.add(new Product("p" + ce.getpId(), "test", "prod" + ce.getpId(), (int)ce.getpId(), ce.getpId() + 0.12f, ce.getQuantity()));
                rs[1] = new DummyResultSet(prodList);
                k = ce.getQuantity();
                System.out.println(k);
            }

            st=conn.createStatement();
            rs[0]=st.executeQuery(query);          
            querystatus=true;

        }
        catch(Exception e)
        {
            querystatus=false;
        }
       return rs;
    }
于 2013-11-12T06:45:39.453 に答える