У меня проблема с закрытием ResultSet
.Что меня смущает, так это то, что он работает для части данных и затем закрывается.Сначала я подумал, что это может быть из-за тайм-аута соединения, но это не так.
Эта часть программы относится к сравнению книги .xlsx
с уже существующей базой данных SQL
и из-за отсутствиялучшего термина объединяет / обновляет его.
Во-первых, в моем классе CompareDatabase
я вызываю функцию поиска, которая ищет в базе данных SQLite
определенную строку каждые 6 итераций.
int columnCount = 6;
dataPoint = dataPoint.replaceAll("Detail", "");
String[] temp = dataPoint.trim().split("\\s+");
System.out.println(Arrays.toString(temp));
for (String tempDataPoint : temp) {
if ( columnCount == 6) {
System.out.println(search(tempDataPoint, connection));
}
columnCount = 0;
} else {
columnCount++;
}
}
Эта функция поиска (также в классе CompareDatabase
должна затем искать значение и возвращать строку (изначально была логической, но я хотел увидеть вывод).
private String search (String searchValue, Connection connection) throws SQLException {
PreparedStatement pStatement = null;
pStatement = connection.prepareStatement("SELECT * FROM lotdatabase where (Vehicle) = (?)");
pStatement.setString(1, searchValue);
try (ResultSet resultSet = pStatement.executeQuery()){
return resultSet.getString(1);
}finally {
close(pStatement);
}
}
ВВ конце вы можете увидеть, что PreparedStatement
закрыт. ResultSet
также должен быть закрыт автоматически (я где-то читал), но JDBC может быть ненадежным.
Однако Connection
все еще открыт какон будет искать около 200+ строк, открывать и закрывать, что много раз не казалось хорошей идеей.
Эти функции вызываются моим main
классом здесь:закомментировано, поскольку произойдет ошибка из-за нарушения первичного ключа.
public static void main(String[] args) {
SQLDatabase sqlDatabase = new SQLDatabase();
//sqlDatabase.convertToSQL("Database1.xlsx");
sqlDatabase.compare("Database2.xlsx");
}
У меня есть подозрение, что я собираюсь описать это неправильно (в аспекте управления соединениями такого рода), и я был бы признателенссылка на то, где я могу научиться делать это правильно.
Кроме того, PreparedStatement
может обрабатывать только один ResultSet
Я не вижу в этом моей проблемы, так как закрываю ее каждую итерацию в for
loop.
Если требуется больше кода или объяснения, пожалуйста, дайте мне знать, и я сделаю все возможное, чтобы помочь.
Спасибо, что нашли время, чтобы прочитать это.