你的位置:首页 > Java教程

[Java教程]Java+Mysql+学生管理系统


最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,也就自己写了一个,不过功能实现的不是很多。

开发语言:java; 开发环境:Mysql, java; 开发工具:eclipse

开发此案例,首先得在电脑上有java开发环境和Mysql, java开发环境与Mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:dingyelf@aliyun.com

此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加、删除、修改。

开发步骤:

1.在数据库中建表:

1 create table stu(2 stuId String,3 stuName String,4 stuSex String,5 stuAge int,6 stuJG String,7 stuDept Sring8 );

 

2.java 代码主要由四个类组成:

Test3包含主函数;StuModel用来刷新、呈现数据库;StuAddDiag用来实现增添读者功能;StuUpDiag是修改学生信息。具体代码如下:

Test3.java:

 1 import javax.swing.*; 2 import java.util.*; 3 import java.awt.*; 4 import java.awt.event.*; 5 import java.sql.Connection; 6 import java.sql.Driver; 7 import java.sql.DriverManager; 8 import java.sql.PreparedStatement; 9 import java.sql.ResultSet; 10 import java.sql.Statement; 11  12 public class Test3 extends JFrame implements ActionListener { 13   //定义一些控件 14   JPanel jp1,jp2; 15   JLabel jl1,jl2; 16   JButton jb1,jb2,jb3,jb4; 17   JTable jt; 18   JScrollPane jsp; 19   JTextField jtf; 20   StuModel sm;   21   //定义连接数据库的变量 22   Statement stat = null; 23   PreparedStatement ps; 24   Connection ct = null; 25   ResultSet rs = null; 26    27   public static void main(String[] args){ 28     Test3 test3 = new Test3(); 29   } 30   //构造函数 31   public Test3(){ 32     jp1 = new JPanel(); 33     jtf = new JTextField(10); 34     jb1 = new JButton("查询"); 35     jb1.addActionListener(this); 36     jl1 = new JLabel("请输入名字:"); 37      38     jp1.add(jl1); 39     jp1.add(jtf); 40     jp1.add(jb1); 41      42     jb2 = new JButton("添加"); 43     jb2.addActionListener(this); 44     jb3 = new JButton("修改"); 45     jb3.addActionListener(this); 46     jb4 = new JButton("删除"); 47     jb4.addActionListener(this); 48      49     jp2 = new JPanel(); 50     jp2.add(jb2); 51     jp2.add(jb3); 52     jp2.add(jb4); 53      54     //创建模型对象 55     sm = new StuModel(); 56      57      58     //初始化 59     jt = new JTable(sm); 60      61     jsp = new JScrollPane(jt); 62      63     //将jsp放入到jframe中 64     this.add(jsp); 65     this.add(jp1,"North"); 66     this.add(jp2,"South"); 67     this.setSize(600, 400); 68     //this.setLocation(300, 200); 69     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 70     this.setVisible(true); 71    73   } 75   public void actionPerformed(ActionEvent arg0) { 76     //判断是哪个按钮被点击 77   if(arg0.getSource() == jb1){ 78     System.out.println("用户希望被查询..."); 79     //因为把对表的数据封装到StuModel中,可以比较简单的完成查询 80     String name = this.jtf.getText().trim(); 81     //写一个sql语句 82     String sql = "select * from stu where stuName = '"+name+"' "; 83     //构建一个数据模型类,并更新 84     sm = new StuModel(sql); 85     //更新jtable 86      jt.setModel(sm); 87         88    } 89    90   //一、弹出添加界面 91   else if(arg0.getSource() == jb2){ 92   System.out.println("添加..."); 93   StuAddDiag sa = new StuAddDiag(this,"添加学生",true); 94      95   //重新再获得新的数据模型, 96   sm = new StuModel(); 97    jt.setModel(sm); 98   }else if(arg0.getSource() == jb4){ 99   //二、删除记录100   //1.得到学生的ID101   int rowNum = this.jt.getSelectedRow();//getSelectedRow会返回给用户点中的行102   //如果该用户一行都没有选,就返回-1103   if(rowNum == -1){104   //提示105   JOptionPane.showMessageDialog(this, "请选中一行");106   return ;107    }108   //得到学术ID109   String stuId = (String)sm.getValueAt(rowNum, 0);110   System.out.println("Id:  "+stuId);111     112   //连接数据库,完成删除任务113   try{114     //1.加载驱动115   Class.forName("com.mysql.jdbc.Driver");  116   //2.连接数据库117   String url = "jdbc:mysql://localhost:3306/spdb1";118   String user = "root";119   String passwd = "lfdy";120       121   ct = DriverManager.getConnection(url, user, passwd);122   System.out.println("连接成功");123   ps = ct.prepareStatement("delete from stu where stuId = ?");124   ps.setString(1,stuId);125    ps.executeUpdate();126            127   }catch(Exception e){128      e.printStackTrace();129   }finally{130   try{131     if(rs!= null){132      rs.close();133     rs = null;134           135      }136     if(ps!= null){137      ps.close();138     ps = null;139      }140     if(ct != null){141      ct.close();142     ct = null;143      }144   } catch(Exception e){145      e.printStackTrace();146    }147      }148   sm = new StuModel();149   //更新jtable150    jt.setModel(sm); 151   }else if(arg0.getSource() == jb3){152   System.out.println("11111");153   //三、用户希望修改154   int rowNum = this.jt.getSelectedRow();155   if(rowNum == -1){156   //提示157   JOptionPane.showMessageDialog(this, "请选择一行");158   return ;159    }160   //显示对话框161   System.out.println( "12435");162   StuUpDiag su = new StuUpDiag(this, "修改学术", true, sm, rowNum);163   sm = new StuModel();164   jt.setModel(sm);165    }  166   }167 }

StuModel.java:

 1 /* 2  * 这是我的一个stu表的模型 3  * 可以把对学生表的操作全都封装到这个类 4 */ 5 package com.test2; 6  7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.ResultSet; 10 import java.sql.Statement; 11 import java.util.Vector; 12 import javax.swing.table.*; 13  14 public class StuModel extends AbstractTableModel{ 15  16   //rowData存放行数据,columnNames存放列名 17   Vector rowData,columnNames; 18        19   //定义连接数据库的变量 20   Statement stat = null; 21   Connection ct = null; 22   ResultSet rs = null; 23    24   //初始化 25   public void init(String sql){ 26     if(sql.equals("")){ 27       sql = "select * from stu"; 28     } 29     //中间 30     //设置列名 31     columnNames = new Vector(); 32     columnNames.add("学号"); 33     columnNames.add("名字"); 34     columnNames.add("性别"); 35     columnNames.add("年龄"); 36     columnNames.add("籍贯"); 37     columnNames.add("门派"); 38          39     //rowData存放多行 40     rowData = new Vector(); 41          42     try{ 43     //1.加载驱动 44     Class.forName("com.mysql.jdbc.Driver"); 45     System.out.println("加载成功"); 46     //2.连接数据库 47     //定义几个常量 48     String url = "jdbc:mysql://localhost:3306/spdb1"; 49     String user = "root"; 50     String passwd = "lfdy"; 51            52     ct = DriverManager.getConnection(url,user,passwd); 53     stat = ct.createStatement();//创建stat对象 54     rs = stat.executeQuery(sql);//查询结果 55            56     while(rs.next()){ 57     Vector hang = new Vector(); 58     hang.add(rs.getString(1)); 59     hang.add(rs.getString(2)); 60     hang.add(rs.getString(3)); 61     hang.add(rs.getInt(4)); 62     hang.add(rs.getString(5)); 63     hang.add(rs.getString(6)); 64     //加入到rowData中 65     rowData.add(hang); 66              67     } 68            69   }catch(Exception e){ 70     e.printStackTrace(); 71   }finally{ 72     try{ 73     if(rs!=null){ 74     rs.close(); 75     rs = null; 76       } 77     if(stat != null){ 78     stat.close(); 79     stat = null; 80       } 81     if(ct != null){ 82     ct.close(); 83     ct = null; 84       } 85         }catch(Exception e){ 86       e.printStackTrace(); 87       } 88     } 89   } 90    91   //增加学生函数 92   public void addStu(String sql){ 93     //根据用户输入的sql语句,完成添加任务 94      95      96      97   } 98    99   //第二个构造函数,通过传递的sql语句来获得数据模型100   public StuModel(String sql){101     this.init(sql);102   }103   104   //构造函数,用于初始化我的数据模型(表)105   public StuModel(){106     this.init("");107   }108   109   //得到共有多少行110   public int getRowCount() {111     // TODO Auto-generated method stub112     return this.rowData.size();113   }114 115   //得到共有多少列116   public int getColumnCount() {117     // TODO Auto-generated method stub118     return this.columnNames.size();119   }120 121   //得到某行某列的数据122   public Object getValueAt(int row, int column) {123     // TODO Auto-generated method stub124     return ((Vector)(this.rowData.get(row))).get(column);125   }126   127   //得到属性名字128   public String getColumnName(int column) {129     // TODO Auto-generated method stub130     return (String)this.columnNames.get(column);131   }132 }

StuAddDiag.java:

 1 package com.test2; 2  3 import javax.swing.JDialog; 4 import javax.swing.*; 5 import java.awt.*; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.sql.Statement; 9 import java.sql.Connection; 10 import java.sql.DriverManager; 11 import java.sql.ResultSet; 12 import java.sql.*; 13  14 public class StuAddDiag extends JDialog implements ActionListener { 15   //定义我需要的swing组件 16   JLabel jl1,jl2,jl3,jl4,jl5,jl6; 17   JTextField jf1,jf2,jf3,jf4,jf5,jf6; 18   JPanel jp1,jp2,jp3; 19   JButton jb1,jb2; 20   //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口 21   public StuAddDiag(Frame owner,String title, boolean modal){ 22     //调用父类方法 23     super(owner,title,modal); 24      25     jl1 = new JLabel("学号"); 26     jl2 = new JLabel("名字"); 27     jl3 = new JLabel("性别");   28     jl4 = new JLabel("年龄"); 29     jl5 = new JLabel("籍贯"); 30     jl6 = new JLabel("门派"); 31      32     jf1 = new JTextField(10); 33     jf2 = new JTextField(10); 34     jf3 = new JTextField(10); 35     jf4 = new JTextField(10); 36     jf5 = new JTextField(10); 37     jf6 = new JTextField(10); 38      39     jb1 = new JButton("添加"); 40     jb1.addActionListener(this); 41     jb2 = new JButton("取消"); 42      43     jp1 = new JPanel(); 44     jp2 = new JPanel(); 45     jp3 = new JPanel(); 46      47     //设置布局 48     jp1.setLayout(new GridLayout(6,1)); 49     jp2.setLayout(new GridLayout(6,1)); 50      51     jp3.add(jb1); 52     jp3.add(jb2); 53      54     jp1.add(jl1); 55     jp1.add(jl2); 56     jp1.add(jl3); 57     jp1.add(jl4); 58     jp1.add(jl5); 59     jp1.add(jl6); 60      61     jp2.add(jf1); 62     jp2.add(jf2); 63     jp2.add(jf3); 64     jp2.add(jf4); 65     jp2.add(jf5); 66     jp2.add(jf6); 67      68     this.add(jp1, BorderLayout.WEST); 69     this.add(jp2, BorderLayout.CENTER); 70     this.add(jp3, BorderLayout.SOUTH); 71      72     this.setSize(300,200); 73     this.setVisible(true); 74   } 75   @Override 76   public void actionPerformed(ActionEvent e) { 77     // TODO Auto-generated method stub 78     if(e.getSource() == jb1){ 79       Connection ct = null; 80       PreparedStatement pstmt = null; 81       ResultSet rs = null; 82        83       try{ 84         //1.加载驱动 85         Class.forName("com.mysql.jdbc.Driver"); 86         System.out.println("加载成功"); 87         //2.连接数据库 88         //定义几个常量 89         String url = "jdbc:mysql://localhost:3306/spdb1"; 90         String user = "root"; 91         String passwd = "lfdy"; 92         ct = DriverManager.getConnection(url,user,passwd); 93      94         //与编译语句对象 95        96         String strsql = "insert into stu values(?,?,?,?,?,?)"; 97         pstmt = ct.prepareStatement(strsql); 98          99         //给对象赋值100         pstmt.setString(1,jf1.getText());101         pstmt.setString(2,jf2.getText());102         pstmt.setString(3,jf3.getText());103         pstmt.setString(4,jf4.getText());104         pstmt.setString(5,jf5.getText());105         pstmt.setString(6,jf6.getText());106         107         pstmt.executeUpdate();108         109         this.dispose();//关闭学生对话框110         111       }catch(Exception arg1){112         arg1.printStackTrace();113       }finally{114         try{115         if(rs!=null){116         rs.close();117         rs = null;118           }119         if(pstmt != null){120         pstmt.close();121         pstmt = null;122           }123         if(ct != null){124         ct.close();125         ct = null;126           }        127         }catch(Exception arg2){128           arg2.printStackTrace();129         }130       }131       132     }133     134   }135   136   137 }

StuUpDiag.java:

package com.test2;/* * 修改学生 */import javax.swing.JDialog;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.*;public class StuUpDiag extends JDialog implements ActionListener {  //定义我需要的swing组件  JLabel jl1,jl2,jl3,jl4,jl5,jl6;  JTextField jf1,jf2,jf3,jf4,jf5,jf6;  JPanel jp1,jp2,jp3;  JButton jb1,jb2;  //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口  public StuUpDiag(Frame owner,String title, boolean modal,StuModel sm,int rowNum){    //调用父类方法    super(owner,title,modal);        jl1 = new JLabel("学号");        jl2 = new JLabel("名字");        jl3 = new JLabel("性别");      jl4 = new JLabel("年龄");    jl5 = new JLabel("籍贯");                jl6 = new JLabel("门派");            jf1 = new JTextField(10);jf1.setText((sm.getValueAt(rowNum, 0)).toString());    jf2 = new JTextField(10);jf2.setText((String)sm.getValueAt(rowNum, 1));    jf3 = new JTextField(10);jf3.setText(sm.getValueAt(rowNum, 2).toString());    jf4 = new JTextField(10);jf4.setText((sm.getValueAt(rowNum, 3)).toString());      jf5 = new JTextField(10);jf5.setText((String)sm.getValueAt(rowNum, 4));    jf6 = new JTextField(10);jf6.setText((String)sm.getValueAt(rowNum, 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));        jp3.add(jb1);    jp3.add(jb2);        jp1.add(jl1);    jp1.add(jl2);    jp1.add(jl3);    jp1.add(jl4);    jp1.add(jl5);    jp1.add(jl6);        jp2.add(jf1);    jp2.add(jf2);    jp2.add(jf3);    jp2.add(jf4);    jp2.add(jf5);    jp2.add(jf6);        this.add(jp1, BorderLayout.WEST);    this.add(jp2, BorderLayout.CENTER);    this.add(jp3, BorderLayout.SOUTH);        this.setSize(300,200);    this.setVisible(true);  }  @Override  public void actionPerformed(ActionEvent e) {    // TODO Auto-generated method stub    if(e.getSource() == jb1){      Connection ct = null;      PreparedStatement pstmt = null;      ResultSet rs = null;            try{        //1.加载驱动        Class.forName("com.mysql.jdbc.Driver");        System.out.println("加载成功");        //2.连接数据库        //定义几个常量        String url = "jdbc:mysql://localhost:3306/spdb1";        String user = "root";        String passwd = "lfdy";        ct = DriverManager.getConnection(url,user,passwd);            //与编译语句对象              String strsql = "insert into stu values(?,?,?,?,?,?)";        pstmt = ct.prepareStatement(strsql);                //给对象赋值        pstmt.setString(1,jf1.getText());        pstmt.setString(2,jf2.getText());        pstmt.setString(3,jf3.getText());        pstmt.setString(4,jf4.getText());        pstmt.setString(5,jf5.getText());        pstmt.setString(6,jf6.getText());                pstmt.executeUpdate();                this.dispose();//关闭学生对话框              }catch(Exception arg1){        arg1.printStackTrace();      }finally{        try{        if(rs!=null){        rs.close();        rs = null;          }        if(pstmt != null){        pstmt.close();        pstmt = null;          }        if(ct != null){        ct.close();        ct = null;          }                }catch(Exception arg2){          arg2.printStackTrace();        }      }          }      }    }

开发与测试结果:

1.系统主界面:

2.按名字查询:

3.选中一行,删除:

4.选中一行修改:

5.点击添加按钮,进行添加:

 

 后续此系统将继续完善,有疑问和技术交流的,可联系本人:dingyelf@aliyun.com