JAVA入门到精通-第70讲-学生管理系统2-增删改

-完成一个mini版本学生管理系统


jude软件:很好使的,安装一下就可以用了;

-学生管理系统的添加 、修改、删除、上下页分页

----------------------------------------------

上面是一个流布局,JPanel

下面是一个流布局,JPanel

中间是Border布局,边界布局,CENTER

JTextField jtf;

先加JLable--->Jtf文本域->JButton按钮

-------------------------

mis 系统:信息管理系统;

-模糊查询还是精确匹配?

查询-按钮响应-监听:

ActionListener

注册监听器:

//判断是哪个按钮被点击

响应函数:

也可以这样做:

局限性是响应函数

actionPerformed和jb1在同一个类里面;

至少能访问到jb1;

Connectionpool这样的技术不需要重新连接;

JDBC需要重新连接数据库;

------------------------------------------

-可不可以对数据库的操作单写一个类,

当我们需要数据库的操作的时候,去new出一个实例


1.想办法把对表的操作封装成一个类:

这个类可以完成对表的操作;


-抽象表模型:

-setModel

如果不用这个方法的话,数据不更新,

查询完以后,更新数据,会发现原来的数据还在那,又添加了一条数据;

会变得越来越多;


-TableModel类

StuModel可以当成一个表来使用了;

-AbstractTableModel

--------------------------------------------

-把对数据库的操作放在AbstractTableModel

-数据模型就是表;

-数据库的操作放在构造函数-public StuModel( )

-初始化的代码放在StuModel ( )里面,代码封装在StuModel

这个类里面去了;

后面需要取数据,直接从这个模型类里面拿就行了;

rowData是一个向量;

row行,column列;

会自动调用;

@override

重写方法-更改列名-Override-getColumnName

【把对数据库的操作做成一个模型】

---------------------------------------------

-如何取数据?

1.创建一个数据模型对象

StuModel  sm=new StuModel();

-查询数据库变得简单方便了:

 现在只要能够拿到用户的关键字,

 然后把一个SQL语句传到

StuModel里面去,再更新一下就可以了;

String name=this.jtf.getText().trim();    //trim把空的字符串过滤一下 

//通过传递的sql语句来获得数据模型

//构建新的数据类型 ,并更新

setModel() 会 自动更新数据;

查询:

在init()函数里面做个小小的配置:

-------------------------

-添加、修改:

这个类显示添加学生信息的对话框:

StuAddDialog继承类:

Browse可以直接让它继承:继承JDialog

extends JDialog

//owner它的父窗口

//title窗口名

//modal模态窗口还是非模态的

modal-这个窗口打开后,是否允许点击其他窗口页面;

--------------------------

-添加按钮

-对按钮响应:

false 窗口可以任意的移动;true必须对窗口响应;

------------------

-把添加的一些列动作,封装到addStu里面去

-添加完过后,需要重新再获得新的数据模型

//删除、修改依次类推;

=================================

-把对一个表的操作封装到数据模型里;

Mini学生管理系统

[JTable_Test3.java]源码

/**
* 完成一个mini版本的学生管理系统(MODEL1模式)
* 1、查询任务
* 2、添加功能
* 3、使用的是sql server2012,数据库驱动与连接与视频教程中的sql server2000连接* 有所不同
*/
package com.student1;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;

public class JTable_Test3 extends JFrame implements ActionListener{
//定义组件
JPanel jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4;
JTable jt;
JScrollPane jsp;
JTextField jtf;
StuModel sm;

//定义操作数据库需要的组件
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;

public static void main(String[] args) {
try {
// 将当前窗体外观设置为所在操作系统的外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
new JTable_Test3();
}

//构造函数
public JTable_Test3(){
jp1=new JPanel();
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addActionListener(this);
jl1=new JLabel("请输入名字");

//把各个空间加入列
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);

jp2=new JPanel();
jb2=new JButton("添加");
jb2.addActionListener(this);
jb3=new JButton("修改");
jb3.addActionListener(this);
jb4=new JButton("删除");
jb4.addActionListener(this);

//把各个按钮加入到jp2中
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);

//创建一个数据模型对象
sm=new StuModel();

//初始化JTable
jt=new JTable(sm);

//初始化jsp JScrollPane
jsp=new JScrollPane(jt);

//把jsp放入到jframe
this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");

this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
//因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询
String name=this.jtf.getText();
//写一个SQL语句
String sql="select * from stu where stuName=‘"+name+"‘";
//构建新的数据模型类,并更新
sm=new StuModel(sql);
//更新JTable
jt.setModel(sm);
}
//用户点击添加时
else if(e.getSource()==jb2){
StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
//重新再获得新的数据模型
//构建新的数据模型类,并更新
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}
//用户修改数据
else if(e.getSource()==jb3){
int rowNum=this.jt.getSelectedRow();
if(rowNum==-1){
//提示
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}

//显示修改对话框
new StuUpdDialog(this,"修改学生信息",true,sm,rowNum);

//更新数据模型
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}

//用户点击删除时,删除一条选中的数据
else if(e.getSource()==jb4){
//1、得到学生的ID号
//getSelectedRow会返回用户点中的行
//如果该用户一行都没有选择,就会返回-1
int rowNum=this.jt.getSelectedRow();
if(rowNum==-1){
//提示
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}
//得到学生编号
String stuId=(String)sm.getValueAt(rowNum, 0);
//连接数据库,完成删除任务
try {
//1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2、得到连接
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");
ps=ct.prepareStatement("delete from stu where stuid=?");
ps.setString(1, stuId);
ps.executeUpdate();
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
//更新数据模型
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}
}
}

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]源码

/**
* 这是一个stu表的模型
* 可以把对student表的各种操作封装到该模型中
*/
package com.student1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{
//rowData用来存放行数据、columnNames存放列名
Vector rowData,columnNames;
//定义操作数据库需要的组件
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;

public void init(String sql){
if(sql==""||sql.equals(null)){
sql="select * from stu";
}
//中间
columnNames=new Vector<>();
//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");

rowData=new Vector<>();
//rowData可以存放多行
try {
//1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2、得到连接
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");

ps=ct.prepareStatement(sql);
rs=ps.executeQuery();

while(rs.next()){
Vector hang=new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
//加入rowData
rowData.add(hang);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

//构造函数,用于初始我们的数据模型
public StuModel(String sql){
this.init(sql);
}

//构造函数
public StuModel(){
this.init("");
}

//得到共有多少列
public int getColumnCount() {
return this.columnNames.size();
}

public String getColumnName(int column) {
return (String)this.columnNames.get(column);
}

//得到共有多少行
public int getRowCount() {
return this.rowData.size();
}

//得到某行某列的数据
public Object getValueAt(int rowIndex, int columnIndex) {
return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
}
}

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

                hang.add(rs.getString(6));

56

                //加入rowData

57

                rowData.add(hang);

58

            }

59

        } catch (Exception e) {

60

            e.printStackTrace();

61

        }finally{

62

            try {

63

                if(rs!=null){

64

                    rs.close();

65

                }

66

                if(ps!=null){

67

                    ps.close();

68

                }

69

                if(ct!=null){

70

                    ct.close();

71

                }

72

            } catch (SQLException e) {

73

                // TODO Auto-generated catch block

74

                e.printStackTrace();

75

            }

76

        }

77

    }

78

 

79

    //构造函数,用于初始我们的数据模型

80

    public StuModel(String sql){

81

        this.init(sql);

82

    }

83

 

84

    //构造函数

85

    public StuModel(){

86

        this.init("");

87

    }

88

 

89

    //得到共有多少列

90

    public int getColumnCount() {

91

        return this.columnNames.size();

92

    }

93

   

94

    public String getColumnName(int column) {

95

        return (String)this.columnNames.get(column);

96

    }

97

 

98

    //得到共有多少行

99

    public int getRowCount() {

100

        return this.rowData.size();

101

    }

102

 

103

    //得到某行某列的数据

104

    public Object getValueAt(int rowIndex, int columnIndex) {

105

        return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);

106

    }

107

}

108

 

********************************************************************

[StuAddDialog.java]源码

/**
* 添加数据
*/
package com.student1;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuAddDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;

//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
public StuAddDialog(Frame owner,String title,boolean modal){
super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
jl1=new JLabel("学号");
jl2=new JLabel("名字");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");
jl6=new JLabel("系别");

jtf1=new JTextField();
jtf2=new JTextField();
jtf3=new JTextField();
jtf4=new JTextField();
jtf5=new JTextField();
jtf6=new JTextField();

jb1=new JButton("添加");
jb2=new JButton("取消");

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));

//添加组件
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);

jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);
jp2.add(jtf6);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);

jb1.addActionListener(this);
jb2.addActionListener(this);

//展现
this.setSize(300, 250);
this.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
//用户点击添加按钮后的响应动作
if(e.getSource()==jb1){
//连接数据库
Connection ct=null;
Statement stmt=null;
ResultSet rs=null;
PreparedStatement ps=null;
//连接数据库
try {
//1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2、得到连接
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");
String strsql="insert into stu values(?,?,?,?,?,?)";
ps=ct.prepareStatement(strsql);
ps.setString(1,jtf1.getText());
ps.setString(2,jtf2.getText());
ps.setString(3,jtf3.getText());
ps.setInt(4,Integer.parseInt(jtf4.getText()));
ps.setString(5,jtf5.getText());
ps.setString(6,jtf6.getText());
ps.executeUpdate();
this.dispose();
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
if(ps!=null){
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
else if(e.getSource()==jb2){
this.dispose();
}
}
}

154

1

/**

2

 * 添加数据

3

 */

4

package com.student1;

5

 

6

import java.awt.BorderLayout;

7

import java.awt.Frame;

8

import java.awt.GridLayout;

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.sql.Statement;

17

import javax.swing.JButton;

18

import javax.swing.JDialog;

19

import javax.swing.JLabel;

20

import javax.swing.JOptionPane;

21

import javax.swing.JPanel;

22

import javax.swing.JTextField;

23

 

24

public class StuAddDialog extends JDialog implements ActionListener{

25

    //定义我需要的swing组件

26

    JLabel jl1,jl2,jl3,jl4,jl5,jl6;

27

    JButton jb1,jb2;

28

    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

29

    JPanel jp1,jp2,jp3;

30

   

31

    //owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态

32

    public StuAddDialog(Frame owner,String title,boolean modal){

33

        super(owner,title,modal);//调用父类构造方法,达到模式对话框效果

34

        jl1=new JLabel("学号");

35

        jl2=new JLabel("名字");

36

        jl3=new JLabel("性别");

37

        jl4=new JLabel("年龄");

38

        jl5=new JLabel("籍贯");

39

        jl6=new JLabel("系别");

40

       

41

        jtf1=new JTextField();

42

        jtf2=new JTextField();

43

        jtf3=new JTextField();

44

        jtf4=new JTextField();

45

        jtf5=new JTextField();

46

        jtf6=new JTextField();

47

       

48

        jb1=new JButton("添加");

49

        jb2=new JButton("取消");

50

       

51

        jp1=new JPanel();

52

        jp2=new JPanel();

53

        jp3=new JPanel();

54

       

55

        //设置布局

56

        jp1.setLayout(new GridLayout(6,1));

57

        jp2.setLayout(new GridLayout(6,1));

58

       

59

        //添加组件

60

        jp1.add(jl1);

61

        jp1.add(jl2);

62

        jp1.add(jl3);

63

        jp1.add(jl4);

64

        jp1.add(jl5);

65

        jp1.add(jl6);

66

       

67

        jp2.add(jtf1);

68

        jp2.add(jtf2);

69

        jp2.add(jtf3);

70

        jp2.add(jtf4);

71

        jp2.add(jtf5);

72

        jp2.add(jtf6);

73

       

74

        jp3.add(jb1);

75

        jp3.add(jb2);

76

       

77

        this.add(jp1,BorderLayout.WEST);

78

        this.add(jp2,BorderLayout.CENTER);

79

        this.add(jp3,BorderLayout.SOUTH);

80

       

81

        jb1.addActionListener(this);

82

        jb2.addActionListener(this);

83

       

84

        //展现

85

        this.setSize(300, 250);

86

        this.setVisible(true);

87

    }

88

 

89

    @Override

90

    public void actionPerformed(ActionEvent e) {

91

        //用户点击添加按钮后的响应动作

92

        if(e.getSource()==jb1){

93

            //连接数据库

94

            Connection ct=null;

95

            Statement stmt=null;

96

            ResultSet rs=null;

97

            PreparedStatement ps=null;

98

            //连接数据库

99

            try {

100

                //1、加载驱动

101

                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

102

                //2、得到连接

103

            ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;");

104

                String strsql="insert into stu values(?,?,?,?,?,?)";

105

                ps=ct.prepareStatement(strsql);

106

                ps.setString(1,jtf1.getText());

107

                ps.setString(2,jtf2.getText());

108

                ps.setString(3,jtf3.getText());

109

                ps.setInt(4,Integer.parseInt(jtf4.getText()));

110

                ps.setString(5,jtf5.getText());

111

                ps.setString(6,jtf6.getText());

112

                ps.executeUpdate();

113

                this.dispose();

114

            } catch (Exception e2) {

115

                e2.printStackTrace();

116

            }finally{

117

                try {

118

                    if(ps!=null){

119

                        ps.close();

120

                    }

121

                    if(ct!=null){

122

                        ct.close();

123

                    }

124

                } catch (SQLException e1) {

125

                    e1.printStackTrace();

126

                }

127

            }

128

        }

129

        else if(e.getSource()==jb2){

130

            this.dispose();

131

        }

132

    }

133

}

134

 

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/xuxaut-558/p/10045802.html

时间: 2024-10-26 16:39:11

JAVA入门到精通-第70讲-学生管理系统2-增删改的相关文章

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除.查询.添加.修改: -修改: 每个字段都可能修改: //给?赋值 //在prepareStatement语句后面赋值才好用 //修改完了,更新数据 目前为止,已经完成了增删改查-Model1模式 最大特点: 界面和业务逻辑操作是放在一起的: 优点:简单,开发方便: 缺点:代码复用性不高: 中大型项目可读性差,可维护性不高: 前台后端混杂在一起的: 比如:"数据库密码换了, 所有涉及到数据库的地方都需要发生变化" =================================

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.

JAVA入门到精通-第36讲-事件监听-坦克大战4

Java事件处理机制:  事件源:事件:事件监听者:事件处理方法:  任何一个类,只要实现了相应的接口,就可以去监听某个事件源: 一个类要实现监听的基本步骤:  a.实现相应的接口[KeyListener,MouseListener,ActionListener,WindowListener] b.把接口的处理方法根据需要重新编写(override) c.在事件源注册监听 d.事件传递是靠事件对象 通过ActionEvent传递事件: 通过事件进行委派事件模型进行事件处理:  一个事件源可能会生

JAVA入门到精通-第35讲-事件处理-坦克大战3

画出弧形: g.drawArc: 前两个参数:代表中心点,后面代表宽,高,后面是弧度的大小:  50代表弧度,后面方向:    SWING编程三个部分: (1)组件和布局管理器: (2)绘图技术: (3)事件处理机制:  鼠标,键盘按下的某个按钮或者移动等都是事件: JAVA认为,消息是一种事件对象:事件监听者也是一个类: 事件监听者中有函数或者方法专门去处理事件: import  java.awt.Event.*; 需要对事件进行处理,把Event包带进去:  Border布局中间是 默认的:

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第46讲-IO编程.记事本开发

IO编程-记事本开发 fis.read(bytes) 字节数组: 通过fis把文件里面的1800个字符,尽可能的读, 最多读1024个.记录一下,0-1024记录到bytes; 再去读的首,fis.read试图1024个字节,不够了, 第二次读了776个,n=776:(0,776): 第三次,又准备读1024,这次一个读不到,返回-1: 退出循环: JMenuBar 菜单条是一个JMenuBar: JMenu File是一个JMenu; JMenuItem 下面这些选项是JMenuItem; 一

JAVA入门到精通-第92讲-山寨QQ项目6-多对多的聊天

QQ聊天项目演示-多对多的聊天 流同时并发的异常: 服务器中转 2/3号只有一个连接: 接收信息:while循环不停地读取: 当1号点开两个窗口时,2/3会共同去争取这个socket: 会出现流同时并发异常: Socket处理成static不太合理: 启动一个窗口就会占据Socket不放: ------------- -实现真正的多人聊天,互相不出现错误 -每一个登录的账号独享一份socket -去掉static 当一个链接达成的时候, 启动线程, 和服务器保持通讯的状态: 做一个类来管理客户端