java - java - 如何将MySQL中数据库中的图像显示到java中的jTable中?
问题描述
在我正在进行的一个项目中,我有 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
为 anImageIcon
并将其添加Icon
到 a JLabel
。每次呈现表格的单元格时都会进行此转换,这不是很有效。
阅读 Swing 教程中有关如何使用渲染器的部分,以获取更多信息和工作示例,以帮助您入门。
或者另一种方法是不使用 DbUtils。相反,您将数据库中的数据读入您DefaultTableModel
自己。这种方法的优点是您创建ImageIcon
一次,当数据加载时,您使用默认的图标渲染器JTable
来显示图标。
有关将数据直接读取到表模型中的示例,请参阅:如何将 DefaultTableModel 对象的数据获取到 DefaultTableModel 的子类中。
您需要修改代码以将 Blob 转换ImageIcon
为最后一列的。
推荐阅读
- c# - 无连接客户端/服务器策略 (UDP) - .NET
- r - 用 sub 和 if 在 R 中替换第一个数字字符
- android - 如何构建颤振键盘?
- sql - 使用 DISTINCT 记录从 DATETIME 计算和创建持续时间
- signalr - DNN 8 (DotNetNuke) 如何配置 SignalR?
- apache-kafka - Kafka RabbitMQ connector - can only get byte arrays
- java - DateTimeFormatter 无法解析日期字符串,但 SimpleDateFormat 能够
- perl - 为什么 opendir 参数无效?
- swift - 如何在 SwiftUI 中完成异步请求后调用函数?
- kotlin - 如果 kotlin 包有多个主要功能,我该如何调用特定的一个?