JAVA入门到精通-第70讲-学生管理系统2-增删改
Posted 夏至稻花如白练,大暑池畔赏红莲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA入门到精通-第70讲-学生管理系统2-增删改相关的知识,希望对你有一定的参考价值。
-完成一个mini版本学生管理系统
jude软件:很好使的,安装一下就可以用了;
![](https://image.cha138.com/20210524/feaee5cdf62e448882013f88aa2a06a9.jpg)
-学生管理系统的添加 、修改、删除、上下页分页
![](https://image.cha138.com/20210524/f4dc330a217745d9975f3dd4c3ad2c09.jpg)
----------------------------------------------
![](https://image.cha138.com/20210524/48248b2414eb4f98bf3a619127f6772f.jpg)
上面是一个流布局,JPanel
下面是一个流布局,JPanel
中间是Border布局,边界布局,CENTER
![](https://image.cha138.com/20210524/bba4edad56914403bbe9946132903816.jpg)
JTextField jtf;
先加JLable--->Jtf文本域->JButton按钮
![](https://image.cha138.com/20210524/558b5c35cf684a65b72a124a5f3a3d29.jpg)
![](https://image.cha138.com/20210524/7afa0ab324eb43eabb015dd7a77ab97d.jpg)
![](https://image.cha138.com/20210524/cd544c4eb75a4091873891f34dfd9ac9.jpg)
-------------------------
mis 系统:信息管理系统;
-模糊查询还是精确匹配?
![](https://image.cha138.com/20210524/1a4882012d1c4588911aa63002c54628.jpg)
查询-按钮响应-监听:
ActionListener
注册监听器:
![](https://image.cha138.com/20210524/f768f6b34f4b423393b081234c581d74.jpg)
//判断是哪个按钮被点击
响应函数:
![](https://image.cha138.com/20210524/da12a49d93bb40459eff5efad2eccd25.jpg)
也可以这样做:
局限性是响应函数
actionPerformed和jb1在同一个类里面;
至少能访问到jb1;
![](https://image.cha138.com/20210524/7aee3fa89bbc4cea83d5352079772e36.jpg)
Connectionpool这样的技术不需要重新连接;
JDBC需要重新连接数据库;
------------------------------------------
-可不可以对数据库的操作单写一个类,
当我们需要数据库的操作的时候,去new出一个实例
![](https://image.cha138.com/20210524/557aa31a60a44f549e8a4d897dc72dde.jpg)
1.想办法把对表的操作封装成一个类:
这个类可以完成对表的操作;
-抽象表模型:
![](https://image.cha138.com/20210524/8a756fd1809140f5ae836476504a8b66.jpg)
-setModel
如果不用这个方法的话,数据不更新,
查询完以后,更新数据,会发现原来的数据还在那,又添加了一条数据;
会变得越来越多;
![](https://image.cha138.com/20210524/5d90f67e194c4b239d51c32a2a40c00c.jpg)
-TableModel类
StuModel可以当成一个表来使用了;
-AbstractTableModel
![](https://image.cha138.com/20210524/8fd972dbb9e04480a10d854ff70eb659.jpg)
![](https://image.cha138.com/20210524/66e3b758d5c04f5f9d3712c7b0031bc5.jpg)
![](https://image.cha138.com/20210524/4e262889e3644cc9965a44e8a9ce9e62.jpg)
--------------------------------------------
-把对数据库的操作放在AbstractTableModel
-数据模型就是表;
-数据库的操作放在构造函数-public StuModel( )
![](https://image.cha138.com/20210524/7366a46c27bd4691b7c6e0d7bf2d4e83.jpg)
-初始化的代码放在StuModel ( )里面,代码封装在StuModel
这个类里面去了;
![](https://image.cha138.com/20210524/a74250dca6824ce8b3fa3da184f29d31.jpg)
![](https://image.cha138.com/20210524/036f55edf17e4cb7a783de0af51f21b5.jpg)
后面需要取数据,直接从这个模型类里面拿就行了;
![](https://image.cha138.com/20210524/58174f1489004737ac2ced328b618bd2.jpg)
![](https://image.cha138.com/20210524/3b79c30a3ded42a0af85ef7b7c1d7018.jpg)
![](https://image.cha138.com/20210524/a10cdcc263fc4019aee13439dcd1e0d3.jpg)
![](https://image.cha138.com/20210524/9a2e75ecde6545aa92a12bda879e710e.jpg)
rowData是一个向量;
row行,column列;
会自动调用;
![](https://image.cha138.com/20210524/dcc8b4fe73324fdc961c174e85ed6259.jpg)
@override
重写方法-更改列名-Override-getColumnName
![](https://image.cha138.com/20210524/abdc684d353a4d01bd3443bb2e90b75e.jpg)
![](https://image.cha138.com/20210524/ee6ed08eddba4999bca737e376d6855c.jpg)
![](https://image.cha138.com/20210524/5a80e91009ed46ffb4d6fcd530b5c957.jpg)
【把对数据库的操作做成一个模型】
---------------------------------------------
-如何取数据?
1.创建一个数据模型对象
StuModel sm=new StuModel();
-查询数据库变得简单方便了:
现在只要能够拿到用户的关键字,
然后把一个SQL语句传到
StuModel里面去,再更新一下就可以了;
![](https://image.cha138.com/20210524/b9d67d9986324916b1f4941196253d32.jpg)
String name=this.jtf.getText().trim(); //trim把空的字符串过滤一下
![](https://image.cha138.com/20210524/5dbdd50e9f5f405d80dd1c47d514fa08.jpg)
//通过传递的sql语句来获得数据模型
![](https://image.cha138.com/20210524/60ba864d7965458d9a1691047bd9d23c.jpg)
//构建新的数据类型 ,并更新
setModel() 会 自动更新数据;
![](https://image.cha138.com/20210524/ddc6a62a98964890bd195690710f9e89.jpg)
![](https://image.cha138.com/20210524/ba1b61c152c24b24aeadd307b09c2dd1.jpg)
![](https://image.cha138.com/20210524/b05b259c590744beb4a63f42438d6924.jpg)
查询:
![](https://image.cha138.com/20210524/77415dfe80f24ba0a4ed117f56faf4d9.jpg)
![](https://image.cha138.com/20210524/78910c8aa7e84fac8960df9da440f627.jpg)
![](https://image.cha138.com/20210524/9854bf91c26240bca33f0551d3ca3dc7.jpg)
在init()函数里面做个小小的配置:
![](https://image.cha138.com/20210524/a3927f98d84e43c4a3b17fa93a246681.jpg)
![](https://image.cha138.com/20210524/208341590d8040cba75539915f75b894.jpg)
-------------------------
-添加、修改:
这个类显示添加学生信息的对话框:
StuAddDialog继承类:
Browse可以直接让它继承:继承JDialog
![](https://image.cha138.com/20210524/17d4b5f3dd5b4a85871426ff7efda31a.jpg)
![](https://image.cha138.com/20210524/c93393b11c124536808e964059894ad5.jpg)
extends JDialog
![](https://image.cha138.com/20210524/8fe059ffd29e4ef59a6c976563e65ad9.jpg)
//owner它的父窗口
//title窗口名
//modal模态窗口还是非模态的
![](https://image.cha138.com/20210524/c25cbcb98c884d16a88a8d790856547d.jpg)
modal-这个窗口打开后,是否允许点击其他窗口页面;
![](https://image.cha138.com/20210524/155a278091ca4e63a47365bfda44c636.jpg)
--------------------------
-添加按钮
![](https://image.cha138.com/20210524/1a21ee53e589472f8ec812ff3d028210.jpg)
-对按钮响应:
![](https://image.cha138.com/20210524/c51bdabd4de44e61b6e3c4479299379f.jpg)
![](https://image.cha138.com/20210524/b5a28c9904a846eb9d2e3e0425bb98c2.jpg)
false 窗口可以任意的移动;true必须对窗口响应;
------------------
-把添加的一些列动作,封装到addStu里面去
![](https://image.cha138.com/20210524/ebb1d9a0d3ea42b494f87ef58f1ee282.jpg)
-添加完过后,需要重新再获得新的数据模型
![](https://image.cha138.com/20210524/2f4a68f5625144d8ba359e260b31cfe6.jpg)
//删除、修改依次类推;
![](https://image.cha138.com/20210524/e714de4ffc4e4439926e32c3e63a954b.jpg)
=================================
-把对一个表的操作封装到数据模型里;
Mini学生管理系统
![](https://image.cha138.com/20210524/a6fe86da727541999f311b9c42e2e9af.jpg)
[JTable_Test3.java]源码
180
1
/**
2
* 完成一个mini版本的学生管理系统(MODEL1模式)
3
* 1、查询任务
4
* 2、添加功能
5
* 3、使用的是sql server2012,数据库驱动与连接与视频教程中的sql server2000连接* 有所不同
6
*/
7
package com.student1;
8
9
import java.awt.event.ActionEvent;
10
import java.awt.event.ActionListener;
11
import java.sql.Connection;
12
import java.sql.DriverManager;
13
import java.sql.PreparedStatement;
14
import java.sql.ResultSet;
15
import java.sql.SQLException;
16
import java.util.Vector;
17
import javax.swing.*;
18
import javax.swing.table.AbstractTableModel;
19
20
public class JTable_Test3 extends JFrame implements ActionListener{
21
//定义组件
22
JPanel jp1,jp2;
23
JLabel jl1;
24
JButton jb1,jb2,jb3,jb4;
25
JTable jt;
26
JScrollPane jsp;
27
JTextField jtf;
28
StuModel sm;
29
30
//定义操作数据库需要的组件
31
PreparedStatement ps=null;
32
Connection ct=null;
33
ResultSet rs=null;
34
35
public static void main(String[] args) {
36
try {
37
// 将当前窗体外观设置为所在操作系统的外观
38
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
39
} catch (ClassNotFoundException e) {
40
e.printStackTrace();
41
} catch (InstantiationException e) {
42
e.printStackTrace();
43
} catch (IllegalAccessException e) {
44
e.printStackTrace();
45
} catch (UnsupportedLookAndFeelException e) {
46
e.printStackTrace();
47
}
48
new JTable_Test3();
49
}
50
51
//构造函数
52
public JTable_Test3(){
53
jp1=new JPanel();
54
jtf=new JTextField(10);
55
jb1=new JButton("查询");
56
jb1.addActionListener(this);
57
jl1=new JLabel("请输入名字");
58
59
//把各个空间加入列
60
jp1.add(jl1);
61
jp1.add(jtf);
62
jp1.add(jb1);
63
64
jp2=new JPanel();
65
jb2=new JButton("添加");
66
jb2.addActionListener(this);
67
jb3=new JButton("修改");
68
jb3.addActionListener(this);
69
jb4=new JButton("删除");
70
jb4.addActionListener(this);
71
72
//把各个按钮加入到jp2中
73
jp2.add(jb2);
74
jp2.add(jb3);
75
jp2.add(jb4);
76
77
//创建一个数据模型对象
78
sm=new StuModel();
79
80
//初始化JTable
81
jt=new JTable(sm);
82
83
//初始化jsp JScrollPane
84
jsp=new JScrollPane(jt);
85
86
//把jsp放入到jframe
87
this.add(jsp);
88
this.add(jp1,"North");
89
this.add(jp2,"South");
90
91
this.setSize(400, 300);
92
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
93
this.setVisible(true);
94
}
95
96
@Override
97
public void actionPerformed(ActionEvent e) {
98
if(e.getSource()==jb1){
99
//因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询
100
String name=this.jtf.getText();
101
//写一个SQL语句
102
String sql="select * from stu where stuName=\'"+name+"\'";
103
//构建新的数据模型类,并更新
104
sm=new StuModel(sql);
105
//更新JTable
106
jt.setModel(sm);
107
}
108
//用户点击添加时
109
else if(e.getSource()==jb2){
110
StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
111
//重新再获得新的数据模型
112
//构建新的数据模型类,并更新
113
sm=new StuModel();
114
//更新JTable
115
jt.setModel(sm);
116
}
117
//用户修改数据
118
else if(e.getSource()==jb3){
119
int rowNum=this.jt.getSelectedRow();
120
if(rowNum==-1){
121
//提示
122
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
123
return;
124
}
125
126
//显示修改对话框
127
new StuUpdDialog(this,"修改学生信息",true,sm,rowNum);
128
129
//更新数据模型
130
sm=new StuModel();
131
//更新JTable
132
jt.setModel(sm);
133
}
134
135
//用户点击删除时,删除一条选中的数据
136
else if(e.getSource()==jb4){
137
//1、得到学生的ID号
138
//getSelectedRow会返回用户点中的行
139
//如果该用户一行都没有选择,就会返回-1
140
int rowNum=this.jt.getSelectedRow();
141
if(rowNum==-1){
142
//提示
143
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
144
return;
145
}
146
//得到学生编号
147
String stuId=(String)sm.getValueAt(rowNum, 0);
148
//连接数据库,完成删除任务
149
try {
150
//1、加载驱动
151
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
152
//2、得到连接
153
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");
154
ps=ct.prepareStatement("delete from stu where stuid=?");
155
ps.setString(1, stuId);
156
ps.executeUpdate();
157
} catch (Exception e2) {
158
e2.printStackTrace();
159
}finally{
160
try {
161
if(rs!=null){
162
rs.close();
163
}
164
if(ps!=null){
165
ps.close();
166
}
167
if(ct!=null){
168
ct.close();
169
}
170
} catch (SQLException e1) {
171
e1.printStackTrace();
172
}
173
}
174
//更新数据模型
175
sm=new StuModel();
176
//更新JTable
177
jt.setModel(sm);
178
}
179
}
180
}
*******************************************************************************
[StuModel.java]源码
108
1
/**
2
* 这是一个stu表的模型
3
* 可以把对student表的各种操作封装到该模型中
4
*/
5
package com.student1;
6
7
import java.sql.Connection;
8
import java.sql.DriverManager;
9
import java.sql.PreparedStatement;
10
import java.sql.ResultSet;
11
import java.sql.SQLException;
12
import java.util.Vector;
13
import javax.swing.table.AbstractTableModel;
14
15
public class StuModel extends AbstractTableModel{
16
//rowData用来存放行数据、columnNames存放列名
17
Vector rowData,columnNames;
18
//定义操作数据库需要的组件
19
PreparedStatement ps=null;
20
Connection ct=null;
21
ResultSet rs=null;
22
23
public void init(String sql){
24
if(sql==""||sql.equals(null)){
25
sql="select * from stu";
26
}
27
//中间
28
columnNames=new Vector<>();
29
//设置列名
30
columnNames.add("学号");
31
columnNames.add("名字");
32
columnNames.add("性别");
33
columnNames.add("年龄");
34
columnNames.add("籍贯");
35
columnNames.add("系别");
36
37
rowData=new Vector<>();
38
//rowData可以存放多行
39
try {
40
//1、加载驱动
41
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
42
//2、得到连接
43
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");
44
45
ps=ct.prepareStatement(sql);
46
rs=ps.executeQuery();
47
48
while(rs.next()){
49
Vector hang=new Vector();
50
hang.add(rs.getString(1));
51
hang.add(rs.getString(2));
52
hang.add(rs.getString(3));
53
hang.add(rs.getInt(4));
54
hang.add(rs.getString(5));
55
以上是关于JAVA入门到精通-第70讲-学生管理系统2-增删改的主要内容,如果未能解决你的问题,请参考以下文章