为什么ResultSet不从MySQL返回数据

问题描述 投票:0回答:1

我想从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();
    }
}                                              

java sql image jlabel
1个回答
0
投票

代码无法关闭,因此会浪费资源。 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。取决于图像的大小和创建代码。

© www.soinside.com 2019 - 2024. All rights reserved.