在我正在研究的项目中,有showStudents.java,它使我能够在jTable swing组件中查看数据库中的所有学生。 jTable正确显示,但图像显示为
5 Debebe Gemesa 2020-02-07 Adama AB 0956852145 1 [B@522d8811
6 Samuel Gemeda 2020-02-05 Bahir Dar A+ 0986451278 1 [B@3330a9d5
最后一栏应该是图片栏。在数据库中,学生表具有以下值
6 Samuel Gemeda 2020-02-05 Bahir Dar A+ 0986451278 1 [BLOB - 32 B]
我的showStudents.java中具有此方法,使我能够查看数据库中的所有列。
public void showRecord(){
try {
stmt = conn.createStatement();
String sql = "SELECT * FROM STUDENT";
ResultSet rs = stmt.executeQuery(sql);
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
如果要使用DbUtils,则需要使用自定义渲染器来显示数据。也就是说,您需要将Blob
转换为ImageIcon
,然后将Icon
添加到JLabel
。每次呈现表的单元格时都会进行此转换,效率不是很高。
阅读Swing教程的How to Use Renderers部分,以获取更多信息和入门示例。
或另一种方法是不使用DbUtils。相反,您自己将数据从数据库读取到DefaultTableModel
中。这种方法的优点是,一次创建ImageIcon
,在加载数据时,然后使用JTable
的默认Icon渲染器显示图标。
请参见:How to get a DefaultTableModel object's data into a subclass of DefaultTableModel以将数据直接读入表模型的示例。
您需要修改代码以将Blob转换为最后一列的ImageIcon
。