Я пытаюсь выполнить 3 операции с базой данных.«Результирующий набор закрыт». ошибка после выполнения
Подсчитайте число строк (с
SELECT COUNT(*) FROM TestCaseTable
)вставить строку
Снова подсчитать количество строк
Это утверждать, что строка имеет быть успешно вставлен в базу данных.
Вот заглушки, который выполняет эти операции:
try {
Class.forName(JDBC_DRIVER).newInstance();
Connection connection = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
statement = connection.createStatement();
System.out.println("Checking before Insertion");
ResultSet beforeinsertResultSet = statement.executeQuery("SELECT COUNT(*) FROM TestCaseTable");
beforeinsertResultSet.next();
int beforeInsertRowCount = beforeinsertResultSet.getInt(1);
System.out.println("Before Insert "+beforeInsertRowCount);
String insertTCQuery = "Insert into TestCaseTable ([Test Case Id], [Test Module Name], [Test Priority], [Test Designed By], "
+ "[Test Designed Date], [Test Executed By], [Test Execution Date], [Test Title], [Test Summary], [Pre-Condition],"
+ " [Dependencies], [Test Steps], [Test Data], [Expected result], [Post-Condition], [Actual Result], "
+ "[Test Status], [Notes]) "
+ "Values ('"+ testCaseIdIs +"', '"+ moduleNameIs +"', '"+ priorityIs +"', '"+ testDesignerIs +"', '"+ testDesignDateIs +"', "
+ "'"+ testExecutedByIs +"', '"+ testExecutionDateIs +"', '"+ titleNameIs +"', '"+ descriptionIs +"', "
+ "'"+ preConditionIs +"', '"+ dependenciesIs +"', '"+ testStepsIs +"', '"+ testDataIs +"',"
+ "'"+ expectedResultsIs +"', '"+ postConditionIs +"', '"+ actualResultIs +"', '"+ testStstusIs +"', "
+ "'"+ notesIs +"')";
statement.executeUpdate(insertTCQuery);
System.out.println("Checking after Insertion");
ResultSet afterinsertResultSet = statement.executeQuery("SELECT COUNT(*) FROM TestCaseTable");
afterinsertResultSet.next();
int afterInsertRowCount = beforeinsertResultSet.getInt(1);
System.out.println("Before Insert "+afterInsertRowCount);
if(afterInsertRowCount == beforeInsertRowCount+1) {
statusLabel.setText("Inserted Successfully!");
statusLabel.setForeground(Color.GREEN);
} else {
statusLabel.setText("Error Inserting Test Case.");
}
beforeinsertResultSet.close();
afterinsertResultSet.close();
statement.close();
connection.close();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Проверка перед установкой Перед Вставка 11 Проверки после вставки com.microsoft.sqlserver.jdbc.SQLServerException: Набор результата закрыт. на com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (SQLServerException.java:190) на com.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed (SQLServerResultSet.java:372) на com.microsoft.sqlserver. jdbc.SQLServerResultSet.getInt (SQLServerResultSet.java:2309) на com.gs.SaveTestCases.SaveTestCase $ ButtonClickListener.actionPerformed (SaveTestCase.java:321) в javax.swing.AbstractButton.fireActionPerformed (Unknown Source) в javax. swing.AbstractButton $ Handler.actionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.fireActionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.setPressed (Неизвестный источник) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (Неизвестный источник) в java.awt.Component.processMouseEvent (Unknown Source) в javax.swing.JComponent.processMouseEvent (Unknown Source) в java.awt.Component .processEvent (Unknown Source) на java.awt.Container.processEvent (Unknown Source) в java.awt.Component.dispatchEventImpl (Unknown Source) в java.awt.Container.dispatchEventImpl (Unknown Source) в java.awt .Component.dispatchEvent (Неизвестный источник) в java.awt.LightweightDispatcher.retargetMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.processMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.dispatchEvent (Unk Nown Источник) на java.awt.Container.dispatchEventImpl (Unknown Source) в java.awt.Window.dispatchEventImpl (Unknown Source) в java.awt.Component.dispatchEvent (Unknown Source) в java.awt.EventQueue. dispatchEventImpl (Unknown Source) в java.awt.EventQueue.access $ 500 (Unknown Source) на java.awt.EventQueue $ 3.run (Unknown Source) в java.awt.EventQueue $ 3.run (Unknown Source) в Java .security.AccessController.doPrivileged (Native Method) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Неизвестный источник) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Неизвестно Источник) на java.awt.EventQueue $ 4.run (Неизвестный источник) на java.awt.EventQueue $ 4.run (Неизвестный источник) на java.security.AccessController.doPrivileged (собственный метод) на java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Неизвестный Источник) на java.awt.EventQueue.dispatchEvent (Unknown Source) в java.awt.EventDispatchThread.pumpOneEventForFilters (Unknown Source) в java.awt.EventDispatchThread.pumpEventsForFilter (Unknown Source) в java.awt.EventDispatchThread.pumpEventsForHierarchy (Неизвестный Источник) на java.awt.EventDispatchThread.pumpEvents (Unknown Source) в java.awt.EventDispatchThread.pumpEvents (Unknown Source) на java.awt.EventDispatchThread.run (Unknown Source)
Как вы можете видеть, счет первой строки и вставка успешно выполняются но третья операция (строка счетчика DB снова) дает ошибку «The result set is closed
».
Может кто-нибудь сказать мне, где я ошибаюсь?
EDIT: Что все, что я пытался, не работали в моем случае:
Я создал новый Connection (
connection1
), заявление (statement1
) и использовал их для второго раза количества строк.Я закрыл
beforeinsertResultSet
после вставки
попробовать с закрытием ваш предыдущий результат установлен перед открытием нового – XtremeBaumer
[Документация 'java.sql.Statement'] (https://docs.oracle.com /javase/7/docs/api/java/sql/Statement.html) ясно говорит: _ По умолчанию, только один объект ResultSet для объекта Statement может быть открыт одновременно. – RealSkeptic
Кроме того, утверждение строки успешно вставлено или нет , используйте переменную, возвращаемую 'statement.executeUpdate (insertTCQuery);'. Пример: 'int count = statement.executeUpdate (insertTCQuery); if (count> 0) {// вставлен успешно} – Amit1011