zoukankan      html  css  js  c++  java
  • 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]源码

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

    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
     



















  • 相关阅读:
    shell28获取命令结果的第几个参数
    在 Amazon EC2 Linux 实例上手动安装 SSM 代理 Raspbian
    Trying out the Intel Neural Compute Stick 2 – Movidius NCS2
    Flask
    virtualenv/venv 和 pip
    轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
    向 AWS Elastic Beanstalk 部署 Flask 应用程序
    Installing the AWS Toolkit for Visual Studio Code
    Installing the AWS SAM CLI on macOS
    树莓派显示器电源管理禁止屏幕休眠
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045802.html
Copyright © 2011-2022 走看看