Код не закрывается и, таким образом, утечка ресурсов. Несколько уродливый синтаксис Try-With-Resources обеспечивает закрытие соединения, оператора и набора результатов даже при возврате / исключении.
Можно указать с помощью Optional явное, было ли изображение найдено в таблице.
Optional.of
также гарантирует, что поле в базе данных не должно содержать значение SQL NULL.
Optional<byte[]> loadImageFromDatabase(String imageM) throws SQLException {
String sql = "select img_imagem from imagem where serial_imagem = ?";
try (Connection conn = getConnection();
PreparedStatement pst = conn.prepareStatement(sql)) {
pst.setString(1, imageM);
try (ResultSet rs = pst.executeQuery()) {
if (rs.next()) {
return Optional.of(rs.getBytes(1)); // ofNullable
} else {
return Optional.empty();
}
}
}
}
Использование:
try {
Optional<byte[]> img = loadImageFromDatabase(jtextField1.getText().trim());
img.ifPresent(image -> {
...
});
} catch (SQLException e) {
Еще есть замечание, что я личноне часто используют ResultSet.getBytes
, а скорее getInputStream
. Зависит от размера изображения и кода создания.