为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 ResultSet 不从 MySQL 返回数据

为什么 ResultSet 不从 MySQL 返回数据

aluckdog 2023-11-10 16:03:35
我想从 MySQL 数据库获取图像并显示在 a 中JLabel,但是当我执行查询并尝试从 a 中获取字节时,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();}  
查看完整描述

1 回答

?
慕妹3146593

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。取决于图像大小和创建代码。


查看完整回答
反对 回复 2023-11-10
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信