0

嗨,我正在尝试从 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

将 ResultSet 从一层返回到另一层的第一件事是非常糟糕的做法,因为它没有实现 Serializable 接口。

另一件坏事是我们向服务层透露了我们在数据访问层中使用 JDBC 的技术,有时服务层开发可以由某些第三方完成。我们不应该向任何其他层透露我们正在使用什么,即 JDBC 或 Hibernate 或 Spring JDBC。

因此,您可以从 ResultSet 收集数据并将其存储到 List 中,然后返回该 List。

于 2013-11-12T06:47:37.383 回答
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

您可以使用ResultSet数组或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 回答