有没有用Java返回结果集的方法?

有没有用Java返回结果集的方法?,java,web-services,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不允许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;
    }

不要介意
返回null零件。他在测试什么。基本上这是我目前的代码。执行查询后如何返回结果?

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

    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;
    }

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

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

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

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


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

查看Spring JDBC JdbcTemplate。这种方法

List<Map<String, Object>> queryForList(String sql)
列表查询列表(字符串sql)

返回每行包含一个映射的列表。你可以使用它或做类似的东西

你在说什么?返回
结果集
是完全可以接受的。实际问题是您在
try
块中声明了
rs
变量,然后试图稍后返回它吗?我在谷歌上搜索了一些人,说是返回ResultSet导致了错误<代码>加载应用程序时出现异常:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:java.lang.RuntimeException:Servlet web服务端点“”失败
。现在我很困惑。如果是这样,我如何返回结果集?你能指导我吗?如果编译器不允许你这么做,这是为了保护你免受一些糟糕的编程实践的影响。返回一个结果集就像是在打你自己的脚。@PeteBelford-为什么?Vidya我想他是在返回
ResultSet
作为web服务方法
Response
java.lang.RuntimeException:Servlet web服务端点失败
,这就是我担心的。我不能肯定这会导致错误,因为我从未见过有人试图从方法返回
ResultSet
。但我不会感到惊讶。为什么返回
ResultSet
是一个坏主意?如果是这样,返回查询结果的最佳方法是什么?这取决于您试图做什么,但基本思想是用数据填充模型并将模型返回给客户机(并且该模型将通过JAXB或类似工具序列化为SOAP)。或者,您可能只想通过从数据库获取的
字符串返回文本。关键是您希望返回与您的用例相关的对象,而不是数据存储库。非常感谢你提供的信息。我会四处看看我能做些什么,我明白了。谢谢你的解释。我需要谷歌更多关于这方面的信息。谢谢你的提醒。