1 回答
TA贡献1820条经验 获得超9个赞
代码不会关闭,因此会泄漏资源。有点丑陋的 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。取决于图像大小和创建代码。
添加回答
举报