Итак, ваша настоящая проблема в том, что вы не знаете, как установить значения / параметры в запросе SQL? Единственный правильный способ сделать это - использовать PreparedStatement
.
String sql = "select * from Customers where Cust_ID = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(custId);
resultSet = preparedStatement.executeQuery();
Он не только облегчает установку объектов Java (String
, Long
, Integer
, Date
, InputStream
и т. Д.) В запросе SQL, но, что наиболее важно, он избавит вас от SQL-инъекция риски . Кроме того, он также быстрее, чем Statement
, потому что он предварительно скомпилирован.
Что касается вашей логики кода, вы всегда должны закрывать ресурсы БД в обратном порядке в блоке finally
, чтобы избежать утечек ресурсов в случае исключений. Вот базовый пример того, как получить Customer
правильный путь JDBC:
public Customer find(Long customerId) throws SQLException {
String sql = "SELECT id, name, age FROM customer WHERE id = ?";
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Customer customer = null;
try {
connection = getConnectionSomehow();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(custId);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
customer = new Customer();
customer.setId(resultSet.getLong("id"));
customer.setName(resultSet.getString("name"));
customer.setAge(resultSet.getInteger("age"));
}
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
if (preparedStatement != null) try { preparedStatement.close(); } catch (SQLException ignore) {}
if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
return customer;
}
Вы можете найти этот урок полезным, чтобы получить больше идей и примеров.