Java Swing之JTable连接Mysql数据库显示数据示例
作者前面写过《Java Swing之JTable示例》一文,该文中通过两种JTable构造方法创建了表格对象,并展示了部分常用方法。本文在前面创建表格的基础上,使用JDBC连接数据库,用表格显示某一数据库表信息。通过该例,读者可以举一反三,拓展表格操作有关功能,实现获取表格某一记录信息并修改、删除,实现对表格的美化,实现显示符合条件的数据表信息等。
关于JDBC连接数据库,如读者需要,可参考作者的《JDBC实现Mysql数据库的连接与应用》一文。在本示例中,使用面向对象的思想对数据库的连接做了封装,读者可参考继续完善形成可复用的数据库操作类。
1.创建数据库
在Mysql中创建名称为“student”的数据库,按照表1结构创建一个studentinfo表,按照表2内容添加记录内容。
本示例中用到的数据库表结构如表1所示。
字段名称 | 字段类型 | 字段大小 | 约束 | 备注 |
stuid | varchar | 4 | 主键 | 学号 |
stuname | varchar | 10 | 姓名 | |
stutel | varchar | 11 | 联系方式 | |
stuschool | varchar | 20 | 学校名称 | |
stupro | varchar | 20 | 专业名称 |
数据表内容如表2所示。
Stuid | Stuname | Stutel | Stuschool | Stupro |
1001 | 张三 | 13312345678 | 职业学院 | 软件技术 |
1002 | 李思 | 13112345678 | 职业学院 | 软件技术 |
1003 | 李武 | 13212345678 | 职业学院 | 软件技术 |
1004 | 王舞 | 13312345678 | 职业学院 | 软件技术 |
1005 | 赵柳 | 13412345678 | 职业学院 | 软件技术 |
1006 | 赵谦 | 13512345678 | 职业学院 | 软件技术 |
1007 | 杨杨 | 13312345678 | 职业学院 | 大数据技术 |
1008 | 柳柳 | 13432145687 | 职业大学 | 大数据技术 |
1009 | 张航 | 13512345695 | 职业大学 | 大数据技术 |
1010 | 李蒙 | 13132165444 | 技术学院 | 人工智能 |
1011 | 王向 | 13032654780 | 技术学院 | 人工智能 |
1012 | 郭果 | 12578963254 | 科技大学 | 云计算技术 |
1013 | 张燕 | 13612365478 | 科技大学 | 云计算技术 |
2.创建数据库连接操作类
本例中用到的数据连接字符串中有关信息要根据读者部署的开发环境对应设置。
数据库连接类的代码如下。读者可以针对数据库表的增加、删除、修改、查询操作补充自定义方法进一步完善连接操作类。
import java.sql.*; public class ConnectDB { Connection conn ; Statement stmt; public ConnectDB() throws ClassNotFoundException, SQLException { //1.加载驱动程序:com.mysql.cj.jdbc.Driver是添加的外接库 Class.forName("com.mysql.cj.jdbc.Driver"); //2.连接数据库 //2.1 构造连接字符串 String url = "jdbc:mysql://localhost:3306/student";//数据库服务器地址及连接数据库名称 String user = "root";//确定连接用户,使用系统提供的root用户 String pwd = "123456";//使用设定的root用户密码 //2.2 使用DriverManager连接数据库 conn = DriverManager.getConnection(url,user,pwd); //3.创建语句执行体对象,用来执行关于sql语句的相关方法 stmt = conn.createStatement(); } //关闭记录集、关闭语句执行体、关闭连接 public void closecnndb() throws SQLException { stmt.close(); conn.close(); } }
3.创建表格显示数据
创建一个JFrame窗体,在期内添加JTable表格,为表格添加滚动条。表格显示从数据库student的表格studentinfo中的所有记录。相关知识已经在作者有关博文中介绍,不再赘述。本程序实现代码如下。
import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.sql.ResultSet; import java.sql.SQLException; public class JTableShowMysqlDataDemo extends JFrame{ public JTableShowMysqlDataDemo() throws ClassNotFoundException, SQLException { inigui(); } //构建界面 public void inigui() throws ClassNotFoundException, SQLException { this.setSize(600,300); this.setTitle("JTable显示数据表信息示例"); this.setLocationRelativeTo(null);//界面居中显示 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(null);//设置无布局管理模式 //添加一个表格显示学生信息。用字段名称构造表格标题 String[] columheader = {"学号","姓名","联系电话","学校","专业"}; //创建表格模型 DefaultTableModel stutablemodel = new DefaultTableModel(columheader,0); //连接数据库,向表格模型中添加查询的数据 iniTable(stutablemodel); //以模型创建表格 JTable stutable = new JTable(stutablemodel); //为表格加滚动条 JScrollPane stujsp = new JScrollPane(stutable); stujsp.setSize(500,200); stujsp.setLocation(50,30); //将滚动面板添加到框架中 this.getContentPane().add(stujsp); this.setVisible(true); } public void iniTable(DefaultTableModel tablemodel) throws ClassNotFoundException, SQLException { ConnectDB connecdb = new ConnectDB();//创建数据库连接对象 //构建查询SQL语句 String sql = "select * from studentinfo"; ResultSet rs = connecdb.stmt.executeQuery(sql); while(rs.next()){//next()返回值为true说明记录集中有符合条件的数据 String stuid = rs.getString("stuid"); String stuname = rs.getString("stuname"); String stutel = rs.getString("stutel"); String stuschool = rs.getString("stuschool"); String stupro = rs.getString("stupro"); String[] rowdata = {stuid,stuname,stutel,stuschool,stupro}; tablemodel.addRow(rowdata);//将行记录添加到表格模型中 } rs.close(); connecdb.closecnndb(); } public static void main(String[] args) throws ClassNotFoundException, SQLException { new JTableShowMysqlDataDemo(); } }
运行以上代码,程序运行结果如图1所示。
图1 JTable显示Mysql数据库表记录以上程序尚有较多可以完善提升的地方,抛砖引玉,读者可以自行优化完善,特别是表格的美化,值得技术探讨与实现,作者也会今后力争写篇关于表格优化的博文回报读者的关注与支持。