我正在尝试显示从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);
}
解决方法:
因为你使用了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(图像)将其设置为ImageIcon并将其放入您的表模型中…
标签:java,mysql,user-interface,swing,jtable
来源: https://codeday.me/bug/20190926/1820269.html