java - 为什么 ResultSet 不从 MySQL 返回数据

标签 java sql image swing jlabel

我试图从 MySQL 数据库获取图像并显示在 JLabel 中,但是当我执行查询并尝试从 ResultSet 获取字节时,它返回一个空数组。

我测试了连接,它正在工作,测试了查询,它也工作了。

try {
    conn = getConnection();
    pst = conn.prepareStatement("select * from imagem where serial_imagem = 123658");
    rs = pst.executeQuery()

    if (rs.next()) {
        image = rs.getBytes("img_imagem");
    }
}catch (Exception e) {
    e.printStackTrace();
}   

最佳答案

代码不会关闭,因此会泄漏资源。有点丑陋的 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。取决于图像大小和创建代码。

关于java - 为什么 ResultSet 不从 MySQL 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451861/

相关文章:

java - 在字符串中查找数字字符串并计数

mysql - MySQL Workbench-如何在不同名称的同一服务器上克隆数据库?

html - 我们可以将 CSS 用于仅比固定尺寸宽的图像吗?

jquery - 当它们被设置为 0 时图像有填充/边距

c# - 从资源加载时在 DataGridView 中显示红色 "X"的图像

java - 时间线通知上的空响应

java - Spring MVC : Bad request (parameter missing) on file upload even when required parameters are present

java - 2 年日期的 SimpleDateFormat 问题

mysql - mysql 日期查询失败

php - SQL:选择没有任何行具有特定列值的 ID