我发现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;
部分。正在测试一些东西基本上这是我现在的代码。如何在执行查询后返回结果?
答案 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。你可以使用它或做类似的东西