在JTable的单列上显示来自MySQL数据库的图像

发布于 2021-02-02 16:20:37

我正在尝试显示从blob数据类型的MySQL数据库检索的图像。无法找出是什么原因导致图像列显示这样的数据[B@29b8e4f7而不是图像图标。

DefaultTableModel model = new DefaultTableModel(new Object[]{
    "image", "item_name", "quantity","price", "category", "color", "size"}, 0){
        @Override
        public Class<?> getColumnClass(int column) {
            switch(column){
                case 0: return ImageIcon.class;
                default: return String.class;
            }
        }
    };

    myTable.setModel(model);

         ResultSet rs = database.getRS();

            int columns = rs.getMetaData().getColumnCount();

            while(rs.next()){
                Object[] row = new Object[columns];
                for(int i = 1; i <= columns; i++){                        
                    row[i-1] = rs.getObject(i);

                }
                DefaultTableModel defmodel = (DefaultTableModel) tableItem.getModel();
                defmodel.insertRow(rs.getRow()-1, row);

            }
关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    由于您曾经preparedstatement.setBlob(1, InputStream);存储图像,因此我必须假定您存储的是物理图像文件/格式,而不仅仅是像素数据。

    您需要回读此图像格式并将其转换为Swing / Java支持的图像格式。

    首先获取Blob对数据库字段的引用…

    Blob blob = rs.getBlob(1);
    

    一旦有了Blob,就可以使用它的二进制文件InputStream并读取数据…

    BufferedImage image = null;
    try (InputStream is = blob.getBinaryStream()) {
        image = ImageIO.read(is);
    } catch (IOException exp) {
        exp.printStackTrace();
    }
    

    现在,你可以把它的ImageIcon使用new ImageIcon(image)和您的表格模型中把这个…



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看