Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从MySQL中提取Blob并将其放入JDialog_Java_Mysql_Blob_Jdialog - Fatal编程技术网

Java 从MySQL中提取Blob并将其放入JDialog

Java 从MySQL中提取Blob并将其放入JDialog,java,mysql,blob,jdialog,Java,Mysql,Blob,Jdialog,我与一个MySQL数据库建立了连接,我试图解决从数据库中提取的blob(图像)无法正确呈现到JDialog中时出现的问题(请参见屏幕截图)。注意:我有多个图像(大小约50-60 Kb),其中一些图像显示正确(完整),但有些图像显示未完全加载。我试图重新保存图像并将其插入MySQL,但问题仍然存在 有什么想法吗 我的代码是: MenuItemPhoto.addActionListener(new ActionListener() { @Override

我与一个MySQL数据库建立了连接,我试图解决从数据库中提取的blob(图像)无法正确呈现到JDialog中时出现的问题(请参见屏幕截图)。注意:我有多个图像(大小约50-60 Kb),其中一些图像显示正确(完整),但有些图像显示未完全加载。我试图重新保存图像并将其插入MySQL,但问题仍然存在

有什么想法吗

我的代码是:

MenuItemPhoto.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

                    try {
                        String sql = "select photo from RDSSPhoto where id ='38'";
                        pst = conn.prepareStatement(sql);
                        rs = pst.executeQuery();

                        if (rs.next()) {

                            byte[] imagedata = rs.getBytes("photo");
                            format = new ImageIcon(imagedata);
                            JOptionPane pane = new JOptionPane((Frame) null, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);

                            JDialog d = pane.createDialog((Frame) null, "Photo");

                            pane.setIcon(format);
                            if (!d.isVisible()) {
                                d.setLocationRelativeTo(RDSSView.this);
                                d.pack();
                            }

                            d.setVisible(true);

                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

        });

那太疯狂了。我以前从未见过它。看起来对话框需要刷新/重新绘制或类似的操作

您可以尝试以下方法:

SwingUtilities.invokeLater(new Runnable()
{
   public void run() {
      d.pack();
   }     
}

喝了一杯完美的咖啡后,我发现了我的问题所在。存储图像的MySQL列被设置为,这意味着每行最多可以存储65535字节(~最大64 Kb)。在我将该列更改为LONGBLOB之后,问题仍然存在。但在我再次将图像插入数据库后,JDialog看起来很棒


所以问题出在列类型上。

您没有说您使用的是哪个版本的MySQL,但是加载图像的应用程序或MySQL对BLOB.version 5.1.36的大小有限制,使用引擎MyISAM