有什么方法可以在Java中返回ResultSet吗?

时间:2013-12-16 04:00:03

标签: java web-services

我发现Java不允许ResultSet作为数据类型返回。并且想问一下在执行查询后是否有更好的解决方案来返回结果?

    try {
        Class.forName("com.mysql.jdbc.Driver");

        Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/shopping mall?zeroDateTimeBehavior=convertToNull", "root", "" );

        java.sql.Statement stmt = con.createStatement() ;
        String query = "SELECT * FROM shops WHERE SHOPNAME LIKE \'%" + shopName + "%\' ORDER BY shopname ASC";           // Select and sort using user input
        ResultSet rs = stmt.executeQuery(query) ;

        // How to return the result after executing the query?
    }
    catch ( SQLException err ) {
        return null;
    }

不介意return null;部分。正在测试一些东西基本上这是我现在的代码。如何在执行查询后返回结果?

3 个答案:

答案 0 :(得分:1)

您编写了一种从数据库中检索信息的方法,应该在何处处理数据并将其放入模型类中?如果你想要松散耦合的代码,那么98%的时间你会在同一个方法中处理结果集。

如果查询需要更改,会发生什么?您希望将更改本地化为尽可能少的代码子集。

答案 1 :(得分:1)

您需要为错误提供更好的上下文。例如,这是一个JAX-WS Web服务端点吗?无论如何,如跟踪中所述,您的错误是Web服务错误 - 而不是JDBC错误。出现此错误的原因有很多 - 通常与您为服务定义API的方式有关。

当然,您可以从方法返回ResultSet,即使这是一个非常糟糕的主意,尤其是来自Web服务端点。无法将ResultSet序列化为SOAP消息。更一般地,返回ResultSet背叛实现细节给方法的调用者。他们为什么要知道你在使用JDBC?或者甚至你正在与一个关系(或任何)数据库交谈?

更好的方法是使用ResultSet中的数据填充与您的域相关的模型对象,并且该对象将通过JAXB或您使用的任何内容序列化为SOAP。或者你可能只是从数据库中返回一些文本,在这种情况下,JAX-WS知道该怎么做。

另外,请确保对SQLException执行某些操作,以便跟踪实际JDBC错误的原因。

答案 2 :(得分:0)

看一下Spring-JDBC JdbcTemplate。这个方法

List<Map<String, Object>> queryForList(String sql)

返回一个包含每行Map的List。你可以使用它或做类似的东西