我试图为通过html形式的文本框检索的查询编写一个JUnit测试。文本检索已经过测试并有效,但我的单元测试失败了。我使用了两个相关的类:QueryController和QueryControlllerTest。我一直在玩弄我在这两个类中关闭的时间和内容,并不断得到错误:结果集关闭后不允许操作。
QueryController测试。Java语言
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
import static org.junit.Assert.*;
public class QueryControllerTest {
@Test
public void testQuery() {
ResultSet testRs = null;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://localhost:3306/test";
String connectionUser = "root";
String connectionPassword = "GCImage";
conn = DriverManager.getConnection(connectionUrl,
connectionUser, connectionPassword);
Query testQuery = new Query();
testQuery
.setQuery("select * from service_request where FN_contact = 'Greg'");
testRs = QueryController.executeSelect(conn, testQuery);
assertEquals("Laughlin", testRs.getString("LN_contact"));
assertEquals("Hello World", testRs.getString("Notes"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
testRs.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
QueryController。Java语言
import java.util.Map;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class QueryController {
@RequestMapping(value = "/query")
public String processRegistration(@ModelAttribute("query") Query query,
Map<String, Object> model) {
String queryString = query.getQuery();
if (queryString != null && !queryString.isEmpty()) {
System.out.println("query (from controller): " + queryString);
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://localhost:3306/test";
String connectionUser = "root";
String connectionPassword = "GCImage";
conn = DriverManager.getConnection(connectionUrl,
connectionUser, connectionPassword);
if (queryString.toLowerCase().startsWith("select")) {
ResultSet rs = executeSelect(conn, query);
} else {
int rowsUpdated = executeUpdate(conn, query);
System.out.println(rowsUpdated + " rows updated");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "query";
}
public static ResultSet executeSelect(Connection conn, Query query) {
ResultSet rs = null;
Statement stmt = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(query.getQuery());
while (rs.next()) {
String id = rs.getString("ID");
String firstName = rs.getString("FN_Contact");
String lastName = rs.getString("LN_Contact");
String notes = rs.getString("Notes");
System.out.println("ID: " + id + ", First Name: " + firstName
+ ", Last Name: " + lastName + ", Notes: " + notes);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs!=null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return rs;
}
}
我认为问题是因为你正在创建两个连接。尝试仅为测试实例化QueryController类的连接。您需要提供连接。将其存储在变量中以运行查询后。
连接con=QueryController。getConnection();
QueryController.executeSelect正在调用rs.close(),但是QueryControlllerTest.testQuery中的assertEquals正在调用testRS上的方法。由于执行选择返回结果集,因此首先关闭它没有意义。此外,执行选择正在传递连接,因此它也不应该关闭该连接(如果调用者想要对同一连接进行两个不同的选择会发生什么?)。
我正在使用Prepared语句进行我的SELECT查询。之后,我试图从结果集获取信息,并将其放入数组列表中。我正在将其放入结果集循环,但我得到了一个错误。sql。SQLException:结果集关闭后不允许操作。我试图用rs.close()关闭它,但它给了我同样的错误。这是我的方法。请帮忙!
我是java和SQL新手,我在重复一个我不知道如何避免的问题: 假设我想创建两个执行查询,一个在getRequest estsFromDB方法中的另一个内部,我创建第一个执行查询,在第二个方法中,我创建第二个执行查询: 第二个功能: 在第二个循环中,我得到了一个SQLException:“ResultSet关闭后不允许操作”,我尝试了:最后用result关闭结果。close()但我也得到异常nul
单击按钮时,此代码显示此错误消息: 结果集关闭后不允许操作 代码:
下面是相关的代码部分:Server. Proxy.update_allLogOut:(第65行是时括号) 服务器服务器: 主要: 我必须指出,它99%的运行时间都没有例外。。但有几次我遇到了这个例外,我不明白为什么会发生这种情况。有什么想法吗?很明显,有些地方做错了,但这里所有类似的主题都没有给出这个问题的答案。。。
我已经为此工作了将近一天半,我似乎无法解决这个错误。我不知道为什么结果集被关闭。也许你们中的一些人可以帮我。 MySQL数据库: MySQLHandler MySQLDonation 异常发生在这里:在MySQLDonation和实际堆栈跟踪的同时循环中: 有了这些信息,让我说这确实有效,我得到了我的信息和游戏中没有的东西,但它会重复,就像用户永远不会从查询中删除,所以它会给他们无限的奖励。如果您
我正在将MySQL与Java结合使用,试图制作shoppingcartDB,并试图删除从订购到现在已经过了30天的元组。 但是编译器说: 我如何解决这个问题? 代码: 抛出异常的代码行是: stmt。executeUpdate(“从篮子中删除,其中orderdate=““Odate”;”);