我是靠谱客的博主 老实水蜜桃,最近开发中收集的这篇文章主要介绍Swing中使用JTable动态获取数据库中的数据并显示,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

笔者注:本文供新手学习使用,若有一定基础,可以直接看3!

 

1.创建数据库:

/*
Navicat MySQL Data Transfer
Source Server
: aa
Source Server Version : 50519
Source Host
: localhost:3306
Source Database
: test
Target Server Type
: MYSQL
Target Server Version : 50519
File Encoding
: 65001
Date: 2017-05-05 20:59:36
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(12) DEFAULT NULL,
`password` varchar(12) DEFAULT NULL,
`sex` char(4) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '李雷', '123', '', '23', '湖北十堰');
INSERT INTO `user` VALUES ('2', '韩梅梅', '111', '', '23', '湖北十堰');
INSERT INTO `user` VALUES ('3', '光头强', '123', '', '22', '森林');
INSERT INTO `user` VALUES ('4', '熊大', '111', '', '22', '森林');
INSERT INTO `user` VALUES ('5', '喜羊羊', '111', '', '16', '青青草原羊村');
INSERT INTO `user` VALUES ('6', '美羊羊', '123', '', '16', '青青草原羊村');
INSERT INTO `user` VALUES ('7', '灰太狼', '111', '', '18', '青青草原狼堡');
INSERT INTO `user` VALUES ('8', '红太郎', '123', '', '18', '青青草原狼堡');

2.创建项目:

2.1按照以下格式创建项目

 

2.2导入mysql链接数据库jar包(jar包下载地址:http://download.csdn.net/detail/yangs_1235/5049404)

2.2.1在项目内新建一个文件夹lib

 

2.2.2将jar包赋值到lib目录下,并添加到项目中(反键,如图所示即可)

 

 

注:1.DbUtils类主要写JDBC链接数据库代码,代码如下:

package com.zjl.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DbUtils {
private
static
final String URL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
private
static
final String USER="root";
private
static
final String PASSWORD="scme";//此处为数据库密码,更改为自己数据库的密码
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(URL, USER, PASSWORD);
}
//关闭方法
public
static void close(ResultSet rs, Statement stat, Connection conn) throws SQLException{
if(rs!=null){
rs.close();
}if(stat!=null){
stat.close();
}if(conn!=null){
conn.close();
}
}
}

2.User类主要是储存数据的实体类,代码如下:

package com.zjl.modle;
public class User {
private int id,age;
private String name,password,sex,address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

3.UserDao主要是进行数据操作的类,代码如下:

package com.zjl.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.zjl.db.DbUtils;
import com.zjl.modle.User;
public class UserDao {
private Connection conn=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
//查询所有用户
public List<User> queryAllUser(){
String sql="select * from user";
List<User> list=new ArrayList<User>();
try {
conn=DbUtils.getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
System.out.println(ps.toString());
while(rs.next()){
User user=new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setSex(rs.getString(4));
user.setAge(rs.getInt(5));
user.setAddress(rs.getString(6));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}

4.Main类是显示数据的窗体类,代码如下:

package com.zjl.view;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.util.List;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import com.zjl.dao.UserDao;
import com.zjl.modle.User;
public class Main extends JFrame {
private JPanel contentPane;
private JTable table;
private String head[]=null;
private Object [][]data=null;
private UserDao user=new UserDao();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setResizable(false);
setTitle("u673Au7968u9884u8BA2u7CFBu7EDF");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 700, 300);
Dimension
us=this.getSize();
Dimension them=Toolkit.getDefaultToolkit().getScreenSize();
int
x=(them.width-us.width)/2;
int
y=(them.height-us.height)/2;
this.setLocation(x, y);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0,0,700,250);
table = new JTable();
table.setBorder(new LineBorder(new Color(0, 0, 0)));
head=new String[] {
"id", "姓名", "密码", "性别", "年龄", "住址", "u7968u4EF7",
};
DefaultTableModel tableModel=new DefaultTableModel(queryData(),head){
public boolean isCellEditable(int row, int column)
{
return false;
}
};
table.setModel(tableModel);
scrollPane.setViewportView(table);
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 684, Short.MAX_VALUE)
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE)
.addGap(66))
);
contentPane.setLayout(gl_contentPane);
}
//生成表格数据
/**
* @return
*/
public Object[][] queryData(){
List<User> list=user.queryAllUser();
data=new Object[list.size()][head.length];
for(int i=0;i<list.size();i++){
for(int j=0;j<head.length;j++){
data[i][0]=list.get(i).getId();
data[i][1]=list.get(i).getName();
data[i][2]=list.get(i).getPassword();
data[i][3]=list.get(i).getSex();
data[i][4]=list.get(i).getAge();
data[i][5]=list.get(i).getAddress();
}
}
return data;
}
}

 

3.重点代码回顾:

3.1效果展示:

 

 3.2定义一个获取数据的方法

//生成表格数据
/**
* @return
*/
public Object[][] queryData(){
List<User> list=user.queryAllUser();
data=new Object[list.size()][head.length];
for(int i=0;i<list.size();i++){
for(int j=0;j<head.length;j++){
data[i][0]=list.get(i).getId();
data[i][1]=list.get(i).getName();
data[i][2]=list.get(i).getPassword();
data[i][3]=list.get(i).getSex();
data[i][4]=list.get(i).getAge();
data[i][5]=list.get(i).getAddress();
}
}
return data;
}

3.3在窗体代码中使用DefaultTableModle绑定数据

String head[]=new String[] {"id", "姓名", "密码", "性别", "年龄", "住址"};
DefaultTableModel tableModel=new DefaultTableModel(queryData(),head);
table.setModel(tableModel);//JTable对象设置DefaultTableModle

 

作为一个带大一自习的学长,我为他们写下了这篇文章,也将这篇文章送给所有学习Swing的朋友们!

转载于:https://www.cnblogs.com/zjl6/p/6814986.html

最后

以上就是老实水蜜桃为你收集整理的Swing中使用JTable动态获取数据库中的数据并显示的全部内容,希望文章能够帮你解决Swing中使用JTable动态获取数据库中的数据并显示所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部