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