Java-Java基础08之JDBC连接与Min版学生管理系统开发

主要内容有:使用jdbc-odbc桥连、PreparedStatement的使用、jdbc读写数据库、JTable使用、Min版学生管理系统v1.0到v2.0开发及其数据库的设计;

文件结构

文件结构
文件结构
文件结构

使用jdbc-odbc桥连_Class18/ com.test1/test1.java

/*
* 演示使用jdbc-odbc桥连方式操作数据库
* 1.配置数据源
* 2.在程序中去连接数据源
*/
package com.test1;
import java.sql.*;
public class Test1 {
    public static void main(String[] args) {
        Connection ct=null;    //定义一个Connection
        Statement sm=null;    //定义一个Statement
        try {
            //1.加载驱动(把需要的驱动程序加入内存)
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2.得到连接[指定连接到哪个数据源,用户名和密码]
            //如果配置数据源时,选择的是windows nt验证,则不需要加"sa","luowei"
            //即:Connection ct=DriverMannager.getConnection("jdbc:odbc:mytest");
            ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","luowei");
            //3.创建Statement或者PreparedStatement[区别]
            //Statement用处是:主要用于发送sql语句到数据库
            sm=ct.createStatement();
            //4.执行(crud,创建数据库,备份数据库,删除数据库....)
            //1.演示添加一条数据到dept表
            //executeUpdate可以执行cud操作(添加,删除,修改)
            int i=sm.executeUpdate("insert into dept values('50','保安部','北京')");
            if(i==1)
            {
                System.out.println("添加ok");
            }
            else
            {
                System.out.println("添加error");
            }
            //2.修改从dept表记录
            int k=sm.executeUpdate("update dept set loc='北京 ' where deptno='40'");
            if(k==1)
            {
                System.out.println("更新成功");
            }
            else
            {
                System.out.println("更新不成功");
            }
            //3.演示从dept表中删除一条记录
            int j=sm.executeUpdate("delete from dept where deptno='50'");
            if(j==1)
            {
                System.out.println("删除ok");
            }
            else
            {
                System.out.println("删除error");
            }
            //查询,显示所有部门
            //ResultSet结果集
            ResultSet rs=sm.executeQuery("select * from dept;");
            //rs指向结果集的第一行的前一行
            //循环取出
            while(rs.next())
            {
                int deptno=rs.getInt(1);
                String dname=rs.getString(2);
                String loc=rs.getString(3);
                System.out.println(deptno+" "+dname+" "+loc);
            }
            ////试图取出1行的第一列
            //rs.next();
            //int a=rs.getInt(1);//取出第1列
            //System.out.println(a);
            ////取出第一行第2列
            //String b=rs.getString(2);
            //System.out.println(b);
            //5.关闭资源,关闭顺序是,谁后创建,则谁先关闭
            try {
                if(sm!=null)
                {
                    rs.close();
                    sm.close();
                    ct.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

PreparedStatement的使用_Class18/ com.test1/test2.java

/*
* PreparedStatement的使用
* 1.PreparedStatement可以提高执行效率(因为它有预编译的功能)
* 2.PreparedStatement可以防止sql注入,但是要求用?赋值的方式才可以
*/
package com.test1;
import java.sql.*;
public class Test2 {
    public static void main(String[] args) {
        Connection ct=null;    //定义一个Connection
        PreparedStatement ps=null;    //定义一个Statement
        ResultSet rs=null;
        try {
            //1.加载驱动(把需要的驱动程序加入内存)
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2.得到连接[指定连接到哪个数据源,用户名和密码]
            //如果配置数据源时,选择的是windows nt验证,则不需要加"sa","luowei"
            //即:Connection ct=DriverMannager.getConnection("jdbc:odbc:mytest");
            ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","luowei");
            //3.创建PreparedStatement - ps
            //Statement用处是:主要用于发送sql语句到数据库
            ps=ct.prepareStatement("select * from dept where deptno=? and loc=?");
            //给?赋值,用?赋值可以防止注入漏洞
            ps.setInt(1, 20);
            ps.setString(2, "dallas");
            rs=ps.executeQuery();
            //4.查询
            //ResultSet结果集
            //循环取出
            while(rs.next())
            {
                int deptno=rs.getInt(1);
                String dname=rs.getString(2);
                String loc=rs.getString(3);
                System.out.println(deptno+" "+dname+" "+loc);
            }
            //使用PrepareStatement添加一条记录
            ps=ct.prepareStatement("insert into dept values(?,?,?)");
            ps.setInt(1, 50);
            ps.setString(2,"安全部");
            ps.setString(3, "北京");
            int i=ps.executeUpdate();
            if(i==1)
            {
                System.out.println("添加ok");
            }
            else
            {
                System.out.println("添加error");
            }
            //5.关闭资源,关闭顺序是,谁后创建,则谁先关闭
            try {
                if(rs!=null)
                {
                    rs.close();
                }
                if(ps!=null)
                {
                    ps.close();
                }
                if(ps!=null)
                {
                    ct.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

jdbc方式操作数据库操作数据库_Class18/ com.test2/test1.java

/*
* jdbc方式操作数据库
* 1.把java.sql.*;引入
* 2.需要引入三个jar包
* 3.如果取值按编号,则需要一一对应,如果是按名字取的,则顺序可以倒乱
*/
package com.test2;
import java.sql.*;
public class Test1 {
    public static void main(String[] args) {
        //PreparedStatement[火箭车]
        //定义需要的对象
        PreparedStatement ps=null;
        Connection ct=null;
        ResultSet rs=null;
        try {
            //初始化我们的对象
            //1.加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            //2.得到连接
            ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://" +
                    "127.0.0.1:1433;databaseName=LiangshanHeros2","sa","luowei");
            //3.创建火箭车
            ps=ct.prepareStatement("select ename,sal,dname from emp,dept " +
                    "where emp.deptno=dept.deptno");
            //4.执行[如果是增加,删除,修改 使用executeUpdate(),如果是查询使用executeQuery()]
            rs=ps.executeQuery();
            //循环取出,雇员的名字,雇员的薪水,部门名称
            while(rs.next())
            {
                //String name=rs.getString(1);
                //float sal=rs.getFloat(2);
                //int deptno=rs.getInt(3);
                String name=rs.getString("ename");
                float sal=rs.getFloat("sal");
                String deptno=rs.getString("dname");
                System.out.println(name+" "+sal+" "+deptno);
            }
            //添加,删除,修改
            ps=ct.prepareStatement("insert into dept values(?,?,?)");
            ps.setInt(1, 100);
            ps.setString(2, "财务部");
            ps.setString(3, "大学城");
            //执行[如果是增加,删除,修改 使用executeUpdate(),如果是查询使用executeQuery()]
            int i=ps.executeUpdate();
            if(i==1)
            {
                System.out.println("添加ok");
            }
            else
            {
                System.out.println("添加error");
            }
            //5.关闭资源,关闭顺序是,谁后创建,则谁先关闭
            try {
                if(rs!=null)
                {
                    rs.close();
                }
                if(ps!=null)
                {
                    ps.close();
                }
                if(ps!=null)
                {
                    ct.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

java中使用ddl语句_Class18/ com.test1/test2.java

/*
* 在java中使用ddl语句(create,drop,backup...)
*/
package com.test2;
import java.sql.*;
public class Test2 {
    public static void main(String[] args) {
        //定义需要的对象
        PreparedStatement ps=null;
        Connection ct=null;
        ResultSet rs=null;
        try {
            //加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            //得到连接
            ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                    "databaseName=LiangshanHeros2","sa","luowei");
            //创建ps,创建数据库,创建表,备份数据库
            ps=ct.prepareStatement("create database vvv");
            ps=ct.prepareStatement("create table xxx(aa int)");
            ps=ct.prepareStatement("backup database aaa to disk='f:/123.bak'");
            //如果执行的是ddl语句
            boolean b=ps.execute();
            System.out.println("OK "+b);
            try {
                if(rs!=null)
                {
                    rs.close();
                }
                if(ps!=null)
                {
                    ps.close();
                }
                if(ps!=null)
                {
                    ct.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JTable使用_Class19/ com.test1/test1.java

/*
* JTable使用
*/
package com.test1;
import javax.swing.*;
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
public class Test1 extends JFrame{
    //rowData用来存放行数据
    //columnNames存放列名
    Vector rowData,columnNames;
    JTable jt=null;
    JScrollPane jsp=null;
    public static void main(String[] args) {
        Test1 test1=new Test1();
    }
    //构造函数
    public Test1()
    {
        Vector columnNames=new Vector();
        //设置列名
        columnNames.add("学号");
        columnNames.add("名字");
        columnNames.add("性别");
        columnNames.add("年龄");
        columnNames.add("籍贯");
        columnNames.add("系别");
        rowData=new Vector();
        //rowData可以存放多行
        Vector hang=new Vector();
        hang.add("lw001");
        hang.add("孙悟空");
        hang.add("男");
        hang.add("500");
        hang.add("花果山");
        hang.add("少林派");
        //加入到rowData
        rowData.add(hang);
        //初始化JTable
        jt=new JTable(rowData,columnNames);
        //初始化jsp JScrollPane
        jsp=new JScrollPane(jt);
        //把jsp放入到jframe
        this.add(jsp);
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

从数据库中取出学生信息_Class19/ com.test1/test2.java

/*
* 从数据库中取出学生信息
*/
package com.test1;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.sql.*;
public class Test2 extends JFrame{
    //rowData用来存放行数据
    //columnNames存放列名
    Vector rowData,columnNames;
    JTable jt=null;
    JScrollPane jsp=null;
    //定义操作数据库需要的东西
    PreparedStatement ps=null;
    Connection ct=null;
    ResultSet rs=null;
    public static void main(String[] args) {
        Test2 test2=new Test2();
    }
    public Test2()
    {
        columnNames=new Vector();
        //设置列名
        columnNames.add("学号");
        columnNames.add("名字");
        columnNames.add("性别");
        columnNames.add("年龄");
        columnNames.add("籍贯");
        columnNames.add("系别");
        rowData=new Vector();
        try {
            //1.加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                    "databaseName=LiangShanHeros","sa","luowei");
            ps=ct.prepareStatement("select * from stu");
            rs=ps.executeQuery();
            while(rs.next())
            {
                //rowData可以存放多行
                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 (Exception e) {
                e.printStackTrace();
            }
        }
        //初始化JTable
        jt=new JTable(rowData,columnNames);
        //初始化jsp JScrollPane
        jsp=new JScrollPane(jt);
        //把jsp放入到jframe
        this.add(jsp);
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

Min版学生管理系统_数据库设计

--创建学生表
create table stu(
stuId varchar(30) primary key,
stuName nvarchar(50) not null,
stuSex nchar(1) check(stuSex in('男','女')) default '男',
stuAge int check(stuAge>1),
stuJg nvarchar(30),
stuDept nvarchar(40)
)
insert into stu values('lw001','孙悟空','男',20,'花果山','少林派');
insert into stu values('lw002','猪八戒','男',15,'高老庄','天上的');
insert into stu values('lw003','沙悟净','男',26,'流沙河','水里的');
insert into stu values('lw004','唐三藏','男',21,'长安','庙里的');
select * from stu;

min版学生管理系统1.0_Class19/ com.test1/test3.java
min版学生管理系统1
min版学生管理系统1

/*
* 完成一个min版本的学生管理系统
*/
package com.test1;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import com.test1.StuModel;
import java.sql.*;
public class Test3 extends JFrame implements ActionListener{
    //定义一些控件
    JPanel jp1,jp2;
    JLabel jl1;
    JButton jb1,jb2,jb3,jb4;
    JTable jt;
    JScrollPane jsp;
    JTextField jtf;
    public static void main(String[] args) {
        Test3 test3=new Test3();
    }
    //构造函数
    public Test3()
    {
        jp1=new JPanel();
        jtf=new JTextField(10);
        jb1=new JButton("查询");
        jb1.addActionListener(this);//添加监听
        jl1=new JLabel("请输入名字:");
        //把各个控件加入jp1
        jp1.add(jl1);
        jp1.add(jtf);
        jp1.add(jb1);
        jp2=new JPanel();
        jb2=new JButton("添加");
        jb2.addActionListener(this);
        jb3=new JButton("修改");
        jb4=new JButton("请输入名字");
        //把各个按钮加入到jp2
        jp2.add(jb2);
        jp2.add(jb3);
        jp2.add(jb4);
        //中间
        //创建一个数据模型对象
        StuModel 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)
        {
            System.out.println("用户想查询!");
            //...
            //查询数据库,更新JTable,这样大量的代码重复,解决办法:
            //把对表操作封装成一个类,可以完成对表的操作
            //把对表的数据装到StuModel中,就可以比较简单的完成查询
            String name=this.jtf.getText().trim();
            //写一个sql语句
            String sql="select * from stu where stuname='"+name+"'";
            //构建新的数据模型类,并更新
            StuModel sm=new StuModel(sql);
            //更新JTable
            jt.setModel(sm);
        }
        //当用户点击添加
        else if(e.getSource()==jb2)
        {
            StuAddDialog sa=new StuAddDialog(this,"添加学生",true);
            //重新再获得新的数据模型
        }
    }
}

min版学生管理系统1.0_Class19/ com.test1/ StuAddDialog.java

package com.test1;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuAddDialog extends JDialog implements ActionListener{
    //定义需要的控件
    JLabel jl1,jl2,jl3,jl4,jl5;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5;
    JPanel jp1,jp2,jp3;
    //owner它的父窗口
    //title窗口名
    //modal指定模式窗口,还是非模式窗口
    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("记过次数");
        jtf1=new JTextField();
        jtf2=new JTextField();
        jtf3=new JTextField();
        jtf4=new JTextField();
        jtf5=new JTextField();
        jb1=new JButton("添加");
        jb2=new JButton("取消");
        jp1=new JPanel();
        jp2=new JPanel();
        jp3=new JPanel();
        //设置布局
        jp1.setLayout(new GridLayout(5,1));
        jp2.setLayout(new GridLayout(5,1));
        //添加组件
        jp1.add(jl1);
        jp1.add(jl2);
        jp1.add(jl3);
        jp1.add(jl4);
        jp1.add(jl5);
        jp2.add(jtf1);
        jp2.add(jtf2);
        jp2.add(jtf3);
        jp2.add(jtf4);
        jp2.add(jtf5);
        jp3.add(jb1);
        jp3.add(jb2);
        this.add(jp1,BorderLayout.WEST);
        this.add(jp2,BorderLayout.CENTER);
        this.add(jp3,BorderLayout.SOUTH);
        jb1.addActionListener(this);
        //展现对话框
        this.setSize(300,200);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //连接数据库
        Connection conn=null;
        //Statement stmt=null;
        ResultSet rs=null;
        PreparedStatement pstmt=null;
        //连接数据库,判断用户是否合法
        try {
            //1.加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            //2.创建连接对象
            String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                    "databaseName=LiangShanHeros";
            //2..注册驱动程序
            conn=DriverManager.getConnection(url,"sa","luowei");
            //3.获取语句对象
            //stmt=conn.createStatement();
            //编译的语句对象
            String strsql="insert into student values(?,?,?,?,?)";
            pstmt=conn.prepareStatement(strsql);
            //给参数赋值
            pstmt.setString(1,jtf1.getText());
            pstmt.setString(2,jtf2.getText());
            pstmt.setString(3, jtf3.getText());
            pstmt.setString(4, jtf4.getText());
            pstmt.setString(5, jtf5.getText());
            //4.执行操作
            pstmt.executeUpdate();
            this.dispose(); //关闭对话框
        } catch (Exception e2) {
            e2.printStackTrace();
        }finally{
            //5释放语句对象,连接对象
            try {
                if(rs!=null) rs.close();
                if(pstmt!=null) pstmt.close();
                if(conn!=null) conn.close();
            } catch (Exception e3) {
                e3.printStackTrace();
            }
        }
    }
}

min版学生管理系统1.0_Class19/ com.test1/ StuModel.java

/*
* 这是一个stu表的模型
* 可以把对stu表的各种操作封装到该模型中
*/
package com.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*;
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.equals(""))
        {
            sql="select * from stu";
        }
        columnNames=new Vector();
        //设置列名
        columnNames.add("学号");
        columnNames.add("名字");
        columnNames.add("性别");
        columnNames.add("年龄");
        columnNames.add("籍贯");
        columnNames.add("系别");
        rowData=new Vector();
        try {
            //1.加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                    "databaseName=LiangShanHeros","sa","luowei");
            ps=ct.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next())
            {
                //rowData可以存放多行
                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 (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public void addStu(String sql)
    {
        //根据用户输入的sql语句,完成添加...
    }
    //通过传递的sqL语句来获得数据模型
    public StuModel(String sql)
    {
        this.init(sql);
    }
    //做一个构造函数,用于初始化我们的数据模型
    public StuModel()
    {
        this.init("");
    }
    @Override //得到共有多少列
    public int getColumnCount() {
        //System.out.println("getColumncount");
        return this.columnNames.size();
    }
    @Override //得到共有多少行
    public int getRowCount() {
        //
        return this.rowData.size();
    }
    @Override //得到某行某列的数据
    public Object getValueAt(int rowIndex, int columnIndex) {
        //return null;
        return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
    }
    @Override
    public String getColumnName(int column) {
        // 重写这个方法,修改默认的列名
        return (String)this.columnNames.get(column);
    }
}

min版学生管理系统2.0_Class20/ com.test1/ StuManage.java
min版学生管理系统2
min版学生管理系统2
min版学生管理系统2

/*
* 完成一个min版本的学生管理系统
* 1.查询任务
* 2.添加一个学生
*/
package com.test1;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import com.test1.StuModel;
import java.sql.*;
public class StuManage 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) {
        StuManage test3=new StuManage();
    }
    //构造函数
    public StuManage()
    {
        jp1=new JPanel();
        jtf=new JTextField(10);
        jb1=new JButton("查询");
        jb1.addActionListener(this);//添加监听
        jl1=new JLabel("请输入名字:");
        //把各个控件加入jp1
        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)
        {
            //对用户点击添加按钮的响应动作
            System.out.println("用户想查询!");
            //...
            //查询数据库,更新JTable,这样大量的代码重复,解决办法:
            //把对表操作封装成一个类,可以完成对表的操作
            //把对表的数据装到StuModel中,就可以比较简单的完成查询
            String name=this.jtf.getText().trim();
            //写一个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, "请选择一行");
                return ;
            }
            //显示修改对话框
            new StuUpdateDialog(this,"修改学生",true,sm,rowNum);
            //重新再获得新的数据模型
            sm=new StuModel();
            //更新JTable
            jt.setModel(sm);
        }
        else if(e.getSource()==jb4)
        {
            //说明用户希望删除记录
            //1.得到该学生的id
            int rowNum=this.jt.getSelectedRow();//返回用户点中的行,如果没有选返返-1
            if(rowNum==-1)
            {
                //提示
                JOptionPane.showMessageDialog(this,"请选择一行");
                return ;
            }
            //得到学生编号
            String stuId=(String)sm.getValueAt(rowNum, 0);
            //System.out.println("id="+stuId);
            //连接数据库,完成删除任务
            try {
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                        "databaseName=LiangshanHeros","sa","luowei");
                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 (Exception e3)
                {
                    e3.printStackTrace();
                }
            }
            //更新数据模型
            sm=new StuModel();
            //更新JTable
            jt.setModel(sm);
        }
    }
}

min版学生管理系统2.0_Class20/ com.test1/ StuAddDialog.java

package com.test1;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuAddDialog extends JDialog implements ActionListener{
    //定义需要的控件
    JLabel jl1,jl2,jl3,jl4,jl5,jl6;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
    JPanel jp1,jp2,jp3;
    //owner它的父窗口
    //title窗口名
    //modal指定模式窗口,还是非模式窗口
    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("添加");
        jb1.addActionListener(this);//注册监听
        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);
        //展现对话框
        this.setSize(300,250);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("添加学生");
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb1)
        {
            //连接数据库
            Connection conn=null;
            //Statement stmt=null;
            ResultSet rs=null;
            PreparedStatement pstmt=null;
            //连接数据库,判断用户是否合法
            try {
                //1.加载驱动
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                //2.创建连接对象
                String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                        "databaseName=LiangShanHeros";
                //2..注册驱动程序
                conn=DriverManager.getConnection(url,"sa","luowei");
                //3.获取语句对象
                //stmt=conn.createStatement();
                //预编译的语句对象
                String strsql="insert into stu values(?,?,?,?,?,?)";
                pstmt=conn.prepareStatement(strsql);
                //给参数赋值
                pstmt.setString(1,jtf1.getText());
                pstmt.setString(2,jtf2.getText());
                pstmt.setString(3,jtf3.getText());
                pstmt.setString(4,jtf4.getText());
                pstmt.setString(5,jtf5.getText());
                pstmt.setString(6,jtf6.getText());
                //4.执行操作
                pstmt.executeUpdate();
                this.dispose(); //关闭对话框
            } catch (Exception e2) {
                e2.printStackTrace();
            }finally{
                //5释放语句对象,连接对象
                try {
                    if(rs!=null) rs.close();
                    if(pstmt!=null) pstmt.close();
                    if(conn!=null) conn.close();
                } catch (Exception e3) {
                    e3.printStackTrace();
                }
            }
        }
    }
}

min版学生管理系统2.0_Class20/ com.test1/ StuUpdateDialog.java

/*
* 修改学生
*/
package com.test1;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuUpdateDialog extends JDialog implements ActionListener{
    //定义需要的控件
    JLabel jl1,jl2,jl3,jl4,jl5,jl6;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
    JPanel jp1,jp2,jp3;
    //owner它的父窗口
    //title窗口名
    //modal指定模式窗口,还是非模式窗口
    public StuUpdateDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNums)
    {
        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();
        //初始化数据
        jtf1.setText((String)sm.getValueAt(rowNums, 0));
        //让jtf1,不能修改
        jtf1.setEditable(false);
        jtf2=new JTextField();
        jtf2.setText((String)sm.getValueAt(rowNums, 1));
        jtf3=new JTextField();
        jtf3.setText((String)sm.getValueAt(rowNums, 2));
        jtf4=new JTextField();
        jtf4.setText(sm.getValueAt(rowNums, 3).toString());
        jtf5=new JTextField();
        jtf5.setText((String)sm.getValueAt(rowNums, 4));
        jtf6=new JTextField();
        jtf6.setText((String)sm.getValueAt(rowNums, 5));
        jb1=new JButton("修改");
        jb1.addActionListener(this);//注册监听
        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);
        //展现对话框
        this.setSize(300,250);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("修改学生");
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb1)
        {
            //连接数据库
            Connection conn=null;
            //Statement stmt=null;
            ResultSet rs=null;
            PreparedStatement pstmt=null;
            //连接数据库,判断用户是否合法
            try {
                //1.加载驱动
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                //2.创建连接对象
                String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                        "databaseName=LiangShanHeros";
                //2..注册驱动程序
                conn=DriverManager.getConnection(url,"sa","luowei");
                //3.获取语句对象
                //stmt=conn.createStatement();
                //预编译的语句对象
                String strsql="update stu set stuName=?,stuSex=?," +
                        "stuAge=?,stuJg=?,stuDept=? where stuId=?";
                pstmt=conn.prepareStatement(strsql);
                //给参数赋值
                pstmt.setString(1,jtf2.getText());
                pstmt.setString(2,jtf3.getText());
                pstmt.setString(3,jtf4.getText());
                pstmt.setString(4,jtf5.getText());
                pstmt.setString(5,jtf6.getText());
                pstmt.setString(6,jtf1.getText());
                //4.执行操作
                pstmt.executeUpdate();
                this.dispose(); //关闭对话框
            } catch (Exception e2) {
                e2.printStackTrace();
            }finally{
                //5释放语句对象,连接对象
                try {
                    if(rs!=null) rs.close();
                    if(pstmt!=null) pstmt.close();
                    if(conn!=null) conn.close();
                } catch (Exception e3)
                {
                    e3.printStackTrace();
                }
            }
        }
    }
}

min版学生管理系统2.0_Class20/ com.test1/ StuModel.java

/*
* 这是一个stu表的模型
* 可以把对stu表的各种操作封装到该模型中
*/
package com.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*;
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.equals(""))
        {
            sql="select * from stu";
        }
        columnNames=new Vector();
        //设置列名
        columnNames.add("学号");
        columnNames.add("名字");
        columnNames.add("性别");
        columnNames.add("年龄");
        columnNames.add("籍贯");
        columnNames.add("系别");
        rowData=new Vector();
        try {
            //1.加载驱动
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +
                    "databaseName=LiangShanHeros","sa","luowei");
            ps=ct.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next())
            {
                //rowData可以存放多行
                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 (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public void addStu(String sql)
    {
        //根据用户输入的sql语句,完成添加...
    }
    //通过传递的sqL语句来获得数据模型
    public StuModel(String sql)
    {
        this.init(sql);
    }
    //做一个构造函数,用于初始化我们的数据模型
    public StuModel()
    {
        this.init("");
    }
    @Override //得到共有多少列
    public int getColumnCount() {
        //System.out.println("getColumncount");
        return this.columnNames.size();
    }
    @Override //得到共有多少行
    public int getRowCount() {
        //
        return this.rowData.size();
    }
    @Override //得到某行某列的数据
    public Object getValueAt(int rowIndex, int columnIndex) {
        //return null;
        return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
    }
    @Override
    public String getColumnName(int column) {
        // 重写这个方法,修改默认的列名
        return (String)this.columnNames.get(column);
    }
}

min版学生管理系统3.0_Class20/ com.test2/ StuManage.java

min版学生管理系统3

/*
* 完成一个min版本的学生管理系统model2
* 1.查询任务
* 2.添加一个学生
*/
package com.test2;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.sql.*;
public class StuManage extends JFrame implements ActionListener{
    //定义一些控件
    JPanel jp1,jp2;
    JLabel jl1;
    JButton jb1,jb2,jb3,jb4;
    JTable jt;
    JScrollPane jsp;
    JTextField jtf;
    StuModel sm;
    public static void main(String[] args) {
        StuManage test3=new StuManage();
    }
    //构造函数
    public StuManage()
    {
        jp1=new JPanel();
        jtf=new JTextField(10);
        jb1=new JButton("查询");
        jb1.addActionListener(this);//添加监听
        jl1=new JLabel("请输入名字:");
        //把各个控件加入jp1
        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();
        String []paras={"1"};
        sm.queryStu("select * from stu where 1=?", paras);
        //初始化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)
        {
            //对用户点击添加按钮的响应动作
            System.out.println("用户想查询!");
            //...
            //查询数据库,更新JTable,这样大量的代码重复,解决办法:
            //把对表操作封装成一个类,可以完成对表的操作
            //把对表的数据装到StuModel中,就可以比较简单的完成查询
            String name=this.jtf.getText().trim();
            //写一个sql语句
            String sql="select * from stu where stuName=?";
            String paras[]={name};
            //构建新的数据模型类,并更新
            sm=new StuModel();
            sm.queryStu(sql, paras);
            //更新JTable
            jt.setModel(sm);
        }
        //当用户点击添加
        else if(e.getSource()==jb2)
        {
            StuAddDialog sa=new StuAddDialog(this,"添加学生",true);
            //重新再获得新的数据模型
            sm=new StuModel();
            String []paras2={"1"};
            sm.queryStu("select * from stu where 1=?", paras2);
            //更新JTable
            jt.setModel(sm);
        }
        else if(e.getSource()==jb3)
        {
            //用户希望修改
            int rowNum=this.jt.getSelectedRow();
            if(rowNum==-1)
            {
                //提示
                JOptionPane.showMessageDialog(this, "请选择一行");
                return ;
            }
            //显示修改对话框
            new StuUpdateDialog(this,"修改学生",true,sm,rowNum);
            //重新再获得新的数据模型
            sm=new StuModel();
            //更新JTable
            String []paras2={"1"};
            sm.queryStu("select * from stu where 1=?", paras2);
            jt.setModel(sm);
        }
        else if(e.getSource()==jb4)
        {
            //说明用户希望删除记录
            //1.得到该学生的id
            int rowNum=this.jt.getSelectedRow();//返回用户点中的行,如果没有选返返-1
            if(rowNum==-1)
            {
                //提示
                JOptionPane.showMessageDialog(this,"请选择一行");
                return ;
            }
            //得到学生编号
            String stuId=(String)sm.getValueAt(rowNum, 0);
            //System.out.println("id="+stuId);
            //创建一个sql语句
            String sql="delete from stu where stuId=?";
            String []paras={stuId};
            StuModel temp=new StuModel();
            temp.updStu(sql,paras);
            //更新数据模型
            sm=new StuModel();
            String []paras2={"1"};
            sm.queryStu("select * from stu where 1=?", paras2);
            //更新JTable
            jt.setModel(sm);
        }
    }
}

min版学生管理系统3.0_Class20/ com.test2/ StuAddDialog.java

package com.test2;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuAddDialog extends JDialog implements ActionListener{
    //定义需要的控件
    JLabel jl1,jl2,jl3,jl4,jl5,jl6;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
    JPanel jp1,jp2,jp3;
    //owner它的父窗口
    //title窗口名
    //modal指定模式窗口,还是非模式窗口
    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("添加");
        jb1.addActionListener(this);//注册监听
        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);
        //展现对话框
        this.setSize(300,250);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("添加学生");
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb1)
        {
            //希望添加学生
            StuModel temp=new StuModel();
            String sql="insert into stu values(?,?,?,?,?,?)";
            String []paras={jtf1.getText(),jtf2.getText(),
                    jtf3.getText(),jtf4.getText(),
                    jtf5.getText(),jtf6.getText()};
            if(!temp.updStu(sql, paras))
            {
                //提示
                JOptionPane.showMessageDialog(this,"添加失败");
            }
            //关闭对话框
            this.dispose();
        }
    }
}

min版学生管理系统3.0_Class20/ com.test2/ StuUpdateDialog.java

/*
* 修改学生
*/
package com.test2;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuUpdateDialog extends JDialog implements ActionListener{
    //定义需要的控件
    JLabel jl1,jl2,jl3,jl4,jl5,jl6;
    JButton jb1,jb2;
    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
    JPanel jp1,jp2,jp3;
    //owner它的父窗口
    //title窗口名
    //modal指定模式窗口,还是非模式窗口
    public StuUpdateDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNums)
    {
        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();
        //初始化数据
        jtf1.setText((String)sm.getValueAt(rowNums, 0));
        //让jtf1,不能修改
        jtf1.setEditable(false);
        jtf2=new JTextField();
        jtf2.setText((String)sm.getValueAt(rowNums, 1));
        jtf3=new JTextField();
        jtf3.setText((String)sm.getValueAt(rowNums, 2));
        jtf4=new JTextField();
        jtf4.setText(sm.getValueAt(rowNums, 3).toString());
        jtf5=new JTextField();
        jtf5.setText((String)sm.getValueAt(rowNums, 4));
        jtf6=new JTextField();
        jtf6.setText((String)sm.getValueAt(rowNums, 5));
        jb1=new JButton("修改");
        jb1.addActionListener(this);//注册监听
        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);
        //展现对话框
        this.setSize(300,250);
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("修改学生");
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb1)
        {
            //做一个sql
            //预编译的语句对象
            String sql="update stu set stuName=?,stuSex=?," +
                    "stuAge=?,stuJg=?,stuDept=? where stuId=?";
            String []paras={jtf2.getText(),jtf3.getText(),
                    jtf4.getText(),jtf5.getText(),
                    jtf6.getText(),jtf1.getText()};
            StuModel temp=new StuModel();
            temp.updStu(sql, paras);
            this.dispose(); //关闭对话框
        }
    }
}

min版学生管理系统3.0_Class20/ com.test2/ StuModel.java

/*
* 这是一个stu表的模型
* 可以把对stu表的各种操作封装到该模型中
*/
package com.test2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*;
public class StuModel extends AbstractTableModel{
    //rowData用来存放行数据
    //columnNames存放列名
    Vector rowData,columnNames;
    //初始化连接数据库,查询,查询的本质就是初始化
    public void queryStu(String sql,String []paras)
    {
        SqlHelper sqlHelper=null;
        //中间
        columnNames=new Vector();
        //设置列名
        columnNames.add("学号");
        columnNames.add("名字");
        columnNames.add("性别");
        columnNames.add("年龄");
        columnNames.add("籍贯");
        columnNames.add("系别");
        rowData=new Vector();
        try {
            sqlHelper=new SqlHelper();
            ResultSet rs=sqlHelper.queryExectue(sql, paras);
            while(rs.next())
            {
                //rowData可以存放多行
                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
        {
            //关闭资源
            sqlHelper.close();
        }
    }
    //更新学生,添加学生(增、删、改)
    @SuppressWarnings("finally")
    public boolean updStu(String sql,String []paras)//通过函数传入参数解决
    {
        //根据用户输入的sql语句,完成添加...
        //创建SqlHelper(如果程序并发性不考虑,可以把SqlHelper做成static)
        SqlHelper sqlHelper=new SqlHelper();
        return sqlHelper.updExecute(sql, paras);
    }
    //做一个构造函数,用于初始化我们的数据模型
    public StuModel()
    {
    }
    @Override //得到共有多少列
    public int getColumnCount() {
        //System.out.println("getColumncount");
        return this.columnNames.size();
    }
    @Override //得到共有多少行
    public int getRowCount() {
        //
        return this.rowData.size();
    }
    @Override //得到某行某列的数据
    public Object getValueAt(int rowIndex, int columnIndex) {
        //return null;
        return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
    }
    @Override
    public String getColumnName(int column) {
        // 重写这个方法,修改默认的列名
        return (String)this.columnNames.get(column);
    }
}

min版学生管理系统3.0_Class20/ com.test2/ SqlHelper.java

/*
* 这是一个对数据库进行操作的类(SqlHelper)
*/
package com.test2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SqlHelper {
    //定义操作数据库需要的东西
    PreparedStatement ps=null;
    Connection ct=null;
    ResultSet rs=null;
    String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=LiangshanHeros";
    String user="sa";
    String passwd="luowei";
    String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    //关闭数据库资源
    public void close()
    {
        //关闭资源
        try {
            if(rs!=null) rs.close();
            if(ps!=null) ps.close();
            if(ct!=null) ct.close();
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
    //写一个不需要注入的方法
    public ResultSet queryExectue(String sql)
    {
        try {
            //1.加载驱动
            Class.forName(driver);
            //2.得到连接
            ct=DriverManager.getConnection(url,user,passwd);
            //3.创建ps
            ps=ct.prepareStatement(sql);
            rs=ps.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        }finally
        {
            //关闭资源,???
        }
        return rs;
    }
    //查询数据库操作
    public ResultSet queryExectue(String sql,String []paras)
    {
        try {
            //1.加载驱动
            Class.forName(driver);
            //2.得到连接
            ct=DriverManager.getConnection(url,user,passwd);
            //3.创建ps
            ps=ct.prepareStatement(sql);
            //给ps的问号赋值
            for(int i=0;i<paras.length;i++)
            {
                ps.setString(i+1, paras[i]);
            }
            rs=ps.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        }finally
        {
            //关闭资源,???
        }
        return rs;
    }
    //把增、删、改合到一起
    public boolean updExecute(String sql,String []paras)
    {
        boolean b=true;
        try {
            //1.加载驱动
            Class.forName(driver);
            //2.得到连接
            ct=DriverManager.getConnection(url,user,passwd);
            //3.创建ps
            ps=ct.prepareStatement(sql);
            //给ps的问号赋值
            for(int i=0;i<paras.length;i++)
            {
                ps.setString(i+1, paras[i]);
            }
            //4.执行操作
            if(ps.executeUpdate()!=1)
            {
                b=false;
            }
        } catch (Exception e) {
            b=false;
            e.printStackTrace();
        }finally
        {
            this.close();
        }
        return b;
    }
}

版权所有,转载请注明出处 luowei.github.io.