jdbc连接Oracle数据库实现学生管理系统(用数据库连接池支持多用户操作同一数据库)

来源:互联网 发布:大数据时代风险 编辑:程序博客网 时间:2024/05/20 20:17

Hello,大家好!今天是我第一次写微博,经验不足,希望大家多多包涵,给我多提提建议或意见大笑大笑。我为大家带来一个用jdbc连接Oracle数据库实现学生管理系统的项目,大家如果有正在做这方面的项目,可以拿来参考吐舌头。好了,闲话不扯一些,下面进入正题:


   一、首先我来给大家屡一下思路:

1.首先需要先导jar包:一共需要两个   一个是ojdbc14.jar,它是用于实现用jdbc连接数据库的。另一个是c3p0-0.9.1.2.jar,它是使用数据库连接池需要导入的一个包。

2.需要建立连接数据库的配置文件,即db.properties

3.建db包:这个包中有两个类,一个是DBHelper,一个是DBManager  这俩都是用来进行数据库连接和管理的。

4.建vo包:这个包里面全是一些实体类,只有get和set方法

5.建mapper包:这是个新名词,以前没见过,感觉好高大上的样子羡慕,其实这是一个对查询得到的结果集的一个映射,理解了也就那么回事,每个表对应一个mapper类,具体使用下面代码中会提及。

6.建dao包:这个包中每个类对应一个表,每个类中就是对这个表的增删改查等方法的一个封装。

7.建SuperManagerSystem包:这个是管理员登录界面。

8.之后就是建立StudentManagerSystem包ClazzManagerSystem包...等等一些学生和班级界面的展示了,在这里就不一一介绍了,给你们用图展示出来吧。

            

9.对了,我这个项目是用jdbc连接Oracle数据库实现学生管理系统的项目,所以Oracle数据库怎能没有表存在呢,以我的项目为例

我将数据库中的三个表:student表、clazz表、supermanager表一一展示给大家:

student表:

-- Create tablecreate table STUDENT(  STUID   NUMBER not null,  STUNAME VARCHAR2(20),  SEX     VARCHAR2(5),  CLAID   NUMBER)tablespace USERS  pctfree 10  initrans 1  maxtrans 255  storage  (    initial 64    minextents 1    maxextents unlimited  );-- Create/Recreate primary, unique and foreign key constraints alter table STUDENT  add primary key (STUID)  using index   tablespace USERS  pctfree 10  initrans 2  maxtrans 255  storage  (    initial 64K    minextents 1    maxextents unlimited  );alter table STUDENT  add foreign key (CLAID)  references CLAZZ (CLAID);

clazz表:
-- Create tablecreate table CLAZZ(  CLAID   NUMBER not null,  CLANAME VARCHAR2(20) not null)tablespace USERS  pctfree 10  initrans 1  maxtrans 255  storage  (    initial 64    minextents 1    maxextents unlimited  );-- Create/Recreate primary, unique and foreign key constraints alter table CLAZZ  add primary key (CLAID)  using index   tablespace USERS  pctfree 10  initrans 2  maxtrans 255  storage  (    initial 64K    minextents 1    maxextents unlimited  );

supermanager表:
create table SUPERMANAGER(  USER0     VARCHAR2(20),  PASSWORD0 VARCHAR2(20))tablespace USERS  pctfree 10  initrans 1  maxtrans 255  storage  (    initial 64    minextents 1    maxextents unlimited  );


   二、介绍了这么多,连个效果图都没有,还说什么呀说,有图有真相,下面我们就先来看一下效果图。           

1.这是管理员登录界面。

2.这是学生管理界面。

3.这是学生注册界面。

4.这是学生修改界面,当然,学号一般是不允许修改的,可以隐藏学号或者用JLabel展示出来。

5.删除的话,选中要删除的那一行,点击删除就可以删除了。

6.这里是班级管理管理系统,进行班级的增删改查,不过要注意,如果该班级中存在学生,则无法删除该班级,只有全部删除该班级的学生才可以删除这个班级。

7.这是班级添加,添加后会在班级管理管理系统中显示出来。

        

   三、接下来就进入编程阶段:

1.导jar包就不多说一些了,把下载下来的jar包放到WebRoot下的WEB-INF下的lib包中。

2.然后是建立配置文件,选中src右击选择new找到File然后写上你的配置文件名xxx.properties就行了

配置文件主要由4部分组成:

a.驱动字符串:  DRIVER = Oracle.jdbc.driver.OracleDriver    每个单词分别代表:要连接的数据库   连接协议  驱动类

b.连接字符串: URL = jdbc:oracle:thin:@localhost:1521:orcl   每个单词分别代表:连接协议   要连接的数据库  连接方式(直连)  要连接ip  oracle数据库的端口号   数据库实例

c.用户名: USER = scott   这个登录用户名可以改成自己的

d.密码:PASSWORD = tiger  这个密码也可以改成与登录用户相对应的密码

3.先来看一下数据库连接的第一个类DBHelper。

package com.ruide.db;import java.util.Properties;import java.beans.PropertyVetoException;import java.io.IOException;import java.io.InputStream;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DBHelper {//声明四个变量都为   public staticpublic static String DRIVER;public static String URL;public static String USER;public static String PASSWORD;public static ComboPooledDataSource cpds=null;//声明cpds对象,但没分配内存//静态块里赋值,静态方法可以用类名直接调用static{//获取配置文件信息//要用到 Properties类Properties pro=new Properties();//获取输入流截取配置文件信息InputStream in=DBHelper.class.getClassLoader().getResourceAsStream("db.properties");try{//将输入流放在Properties类对象中pro.load(in);}catch(IOException e){e.printStackTrace();}//获取信息DRIVER=pro.getProperty("DRIVER");URL=pro.getProperty("URL");USER=pro.getProperty("USER");PASSWORD=pro.getProperty("PASSWORD");//注明:千变万化,但是这个类是不变的,只是变配置文件//数据库连接池 初始化cpds=new ComboPooledDataSource();//初始化cpds对象,拿来用,分配内存,存在地址try {cpds.setDriverClass(DRIVER);} catch (PropertyVetoException e) {e.printStackTrace();}cpds.setJdbcUrl(URL);cpds.setUser(USER);cpds.setPassword(PASSWORD);cpds.setInitialPoolSize(20);//数据库连接池初始有20个连接cpds.setAcquireIncrement(5);//连接不足,每次增加5个cpds.setMaxPoolSize(100);//最多有100个连接}}

4.在写数据库连接的第二个类(DBManager)之前我们需要进行一些准备工作,即建立Student类和IMapper接口和StudentMapper类。
Student类:

package com.ruide.vo;public class Student {int stuid;int clazzid;String stuname;String stusex;public int getClazzid(){return clazzid;}public void setClazzid(int clazzid){this.clazzid=clazzid;}public int getStuid() {return stuid;}public void setStuid(int stuid) {this.stuid = stuid;}public String getStuname() {return stuname;}public void setStuname(String stuname) {this.stuname = stuname;}public String getStusex() {return stusex;}public void setStusex(String stusex) {this.stusex = stusex;}public Student(int stuid, String stuname, String stusex,int clazzid) {super();this.stuid = stuid;this.stuname = stuname;this.stusex = stusex;this.clazzid=clazzid;}public Student() {super();}}
 IMapper接口:
package com.ruide.mapper;import java.util.List;import java.sql.ResultSet; public interface IMapper{//建一个抽象类,抽象方法,返回值是List集合List map(ResultSet ret);//映射类:将结果集的一行数据封装成一个vo类对象,把整个结果集封装成一个List集合}
StudentMapper类:
package com.ruide.mapper;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.ruide.vo.Student;public class StudentMapper implements IMapper{public List map(ResultSet ret){List list=new ArrayList();//注意:以后使用的类能往上提就往上提,能用接口(因为他的实现方式多)不用具体的类,特别是数据类型try {while(ret.next()){Student d=new Student();d.setStuid(ret.getInt("STUID"));d.setStuname(ret.getString("STUNAME"));d.setStusex(ret.getString("SEX"));d.setClazzid(ret.getInt("CLAID"));list.add(d);}return list;}catch (SQLException e){e.printStackTrace();}return null;}}

5.同理,我们还有Clazz类和IMapper接口和ClazzMapper                 SuperManager类和IMapper接口和SuperManagerMapper ,因为IMapper是一个接口,写一个即可,在上处展示,所以我就不在这里展示了。

 Clazz类:
package com.ruide.vo;public class Clazz {private int clazzid;private String clazzname;public int getClazzid(){return clazzid;}public void setClazzid(int clazzid){this.clazzid=clazzid;}public String getClazzname(){return clazzname;}public void setClazzname(String clazzname){this.clazzname=clazzname;}public Clazz(int clazzid,String clazzname){super();this.clazzid=clazzid;this.clazzname=clazzname;}public Clazz(){super();}}
ClazzMapper类:
package com.ruide.mapper;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.ruide.vo.Clazz;public class ClazzMapper implements IMapper {public List map(ResultSet ret) {List list=new ArrayList();try {while(ret.next()){Clazz cl=new Clazz();cl.setClazzid(ret.getInt("CLAID"));cl.setClazzname(ret.getString("CLANAME"));list.add(cl);}return list;} catch (SQLException e) {e.printStackTrace();}return null;}}
SuperManager类:
package com.ruide.vo;public class SuperManager {private String user;private String password;public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public SuperManager(String user, String password) {super();this.user = user;this.password = password;}public SuperManager() {super();}}
SuperManagerMapper 类:
package com.ruide.mapper;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.ruide.vo.SuperManager;public class SuperManagerMapper implements IMapper {public List map(ResultSet rst) {List list=new ArrayList();//注意:以后使用的类能往上提就往上提,能用接口(因为他的实现方式多)不用具体的类,特别是数据类型try {while(rst.next()){SuperManager d=new SuperManager();d.setUser(rst.getString("USER0"));d.setPassword(rst.getString("PASSWORD0"));list.add(d);}} catch (SQLException e) {e.printStackTrace();}return list;}}

6.有了以上的准备工作之后,我们就可以书写第二个数据库连接类DBManager了。
package com.ruide.db;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import com.ruide.mapper.IMapper;public class DBManager {private Connection getConn() throws SQLException{return DBHelper.cpds.getConnection();//从连接池获取连接}public int executeUpdate(String sql,Object params[]){Connection conn=null;PreparedStatement pst=null;try {conn=getConn();//设置连接pst=conn.prepareStatement(sql);//建立通道if(params != null){for(int i=0;i

7.接下来就是对DBManager的进一步封装了,也就是StudentDAO类,这里也一样,还有ClazzDAO和SuperManagerDAO。
StudentDAO类:
package com.ruide.dao;import java.util.List;import com.ruide.db.DBManager;import com.ruide.mapper.StudentMapper;import com.ruide.vo.Student;public class StudentDAO {public int save(Student s){String sql="insert into Student values(?,?,?,?) ";String student = null;Object params[]={s.getStuid(),s.getStuname(),s.getStusex(),s.getClazzid()};DBManager db=new DBManager();int i=db.executeUpdate(sql, params);if(i>0){return i;}else{return -1;}}public int change(Student s){String sql="update student set stuname=?,sex=?,claid=? where stuid=?";DBManager db=new DBManager();Object params[]={s.getStuname(),s.getStusex(),s.getClazzid(),s.getStuid()};int i=db.executeUpdate(sql, params);if(i>0){return i;}else{return -1;}}public List findAll(){String sql="select * from Student order by stuid";DBManager db=new DBManager();StudentMapper mapper=new StudentMapper();List list=db.executeQuary(sql,mapper,null);return list;}public Student findById(int id){String sql="select * from Student where stuid=?";DBManager db=new DBManager();Object params[]={id};StudentMapper mapper=new StudentMapper();List list=db.executeQuary(sql, mapper,params);if(list.size()!=0){return list.get(0);}else{return null;}}public int delete(int id)throws Exception{String sql="delete from Student where stuid=?";DBManager db=new DBManager();Object params[]={id};int i=db.executeUpdate(sql, params);if(i>0){return i;}else{return -1;}}public Student findByName(String name){String sql="select * from Student where stuname=?";DBManager db=new DBManager();StudentMapper mapper=new StudentMapper();Object params[]={name};List list=db.executeQuary(sql, mapper, params);if(list!=null){return list.get(0);}else{return null;}}}
ClazzDAO类:
package com.ruide.dao;import java.util.List;import com.ruide.db.DBManager;import com.ruide.mapper.ClazzMapper;import com.ruide.vo.Clazz;public class ClazzDAO {public List findAll(){String sql="select * from Clazz";DBManager db=new DBManager();ClazzMapper mapper=new ClazzMapper();List list=db.executeQuary(sql, mapper, null);return list;}public Clazz findById(int id){String sql="select * from Clazz where claid=?";DBManager db=new DBManager();ClazzMapper mapper=new ClazzMapper();Object params[]={id};List list=db.executeQuary(sql, mapper, params);if(list.size()>=0){return  list.get(0);}else{return null;}}public Clazz findByName(String name){String sql="select * from Clazz where claname=?";DBManager db=new DBManager();ClazzMapper mapper=new ClazzMapper();Object params[]={name};List list=db.executeQuary(sql, mapper, params);if(list.size()!=0){return list.get(0);}else{return null;}}public int delete(int id)throws Exception{String sql="delete from Clazz where claid=?";DBManager db=new DBManager();Object params[]={id};int i=db.executeUpdate(sql, params);return i;}public int save(Clazz c){String sql="insert into Clazz values(?,?) ";Object params[]={c.getClazzid(),c.getClazzname()};DBManager db=new DBManager();int i=db.executeUpdate(sql, params);return i;}}
SuperManagerDAO类:
package com.ruide.dao;import java.util.List;import com.ruide.db.DBManager;import com.ruide.mapper.IMapper;import com.ruide.mapper.SuperManagerMapper;import com.ruide.vo.SuperManager;public class SuperManagerDAO {//public int save(SuperManager s) throws Exception{//String sql="insert into SuperManager values(?,?,?)";//Object params[]={s.getUser(),s.getPassword()};//DBManager db=new DBManager();//int i=db.executeUpdate(sql, params);//return i;//}//public int delete(int id)throws Exception{//String sql="delete from SuperManager where password0=?";//DBManager db=new DBManager();//Object params[]={id};//int i=db.executeUpdate(sql, params);//return i;//}//public int change(SuperManager s)throws Exception{//String sql="update SuperManager set user0=?,password0=? where password0=?";//DBManager db=new DBManager();//Object params[]={s.getUser(),s.getPassword()};//int i=db.executeUpdate(sql, params);//return i;//}////public List findAll() throws Exception{//String sql="select * from SuperManager";//DBManager db=new DBManager();//SuperManager mapper=new SuperManager();//return db.executeQuary(sql, (IMapper) mapper, null);//}public SuperManager findByName(String user0,String password0) throws Exception{String sql="select * from SuperManager where user0=? and password0=?";DBManager db=new DBManager();Object params[]={user0,password0};SuperManagerMapper mapper=new SuperManagerMapper();List list= db.executeQuary(sql, mapper, params);if(list.size()==0){return null;}return list.get(0);}}

 8.完成了这么多工作,我们的效果怎么样呢,下面就可以看出来了,之后将进入图形化展示阶段
      首先看一下StudentTable类,这个类其实是拖的,先选中src右键new找到Matisse Form然后写上类名StudentTable最后别忘了选中JFram,在这个类的删除和修改的时候有一个点睛之笔,就是id获取的时候,直接通过选中那一行就能按照id进行操作,真的很神奇。没想到的小伙伴可以观摩一下了大笑
StudentTable类:
package StudentManagerSystem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import java.util.List;import com.ruide.ClazzManagerSystem.ClazzManager;import com.ruide.dao.ClazzDAO;import com.ruide.dao.StudentDAO;import com.ruide.vo.Clazz;import com.ruide.vo.Student;public class StudentTable extends javax.swing.JFrame {public StudentTable() {initComponents();setLocationRelativeTo(null);}private void initComponents(){jScrollPane1 = new javax.swing.JScrollPane();jTable1 = new javax.swing.JTable();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();jButton3 = new javax.swing.JButton();jButton4 = new javax.swing.JButton();setResizable(false);//禁止改变窗体大小setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);StudentDAO st=new StudentDAO();try {List list=new ArrayList();list=st.findAll();} catch (Exception e) {e.printStackTrace();}StudentDAO stuDAO=new StudentDAO();List list1=stuDAO.findAll();Object studen[][]=new Object[list1.size()][];ClazzDAO clz=new ClazzDAO();for(int i=0;i

然后是添加学生方法StudentAdd类:
package StudentManagerSystem;import java.util.List;import javax.swing.JOptionPane;import com.ruide.ClazzManagerSystem.ClazzManager;import com.ruide.dao.ClazzDAO;import com.ruide.dao.StudentDAO;import com.ruide.vo.Clazz;import com.ruide.vo.Student;public class StudentAdd extends javax.swing.JFrame {protected Object[] params;public StudentAdd(){initComponents();setLocationRelativeTo(null);}private void initComponents() {jLabel1 = new javax.swing.JLabel();jTextField1 = new javax.swing.JTextField();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();jLabel4 = new javax.swing.JLabel();jLabel5 = new javax.swing.JLabel();jTextField2 = new javax.swing.JTextField();jComboBox1 = new javax.swing.JComboBox();jComboBox2 = new javax.swing.JComboBox();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setResizable(false);jLabel1.setText("\u6b22\u8fce\u6765\u5230\u5b66\u751f\u6ce8\u518c\u754c\u9762\uff01");jTextField1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jTextField1ActionPerformed(evt);}});jLabel2.setText("\u5b66\u751f\u5b66\u53f7\uff1a");jLabel3.setText("\u5b66\u751f\u59d3\u540d\uff1a");jLabel4.setText("\u5b66\u751f\u6027\u522b\uff1a");jLabel5.setText("\u5b66\u751f\u73ed\u7ea7\uff1a");jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"男", "女" }));ClazzDAO dao=new ClazzDAO();List list=dao.findAll();String st[]=new String[list.size()];for(int i=0;i list=dao1.findAll();//for(int i=0;i list=dao.findAll();String st[]=new String[list.size()];for(int i=0;i

最后看一下StduentUpdate类:
package StudentManagerSystem;import java.util.List;import com.ruide.dao.ClazzDAO;import com.ruide.dao.StudentDAO;import com.ruide.vo.Clazz;import com.ruide.vo.Student;public class StudentUpdate extends javax.swing.JFrame {public StudentUpdate(int id){initComponents(id);setLocationRelativeTo(null);}private void initComponents(int id){jLabel1 = new javax.swing.JLabel();jLabel2 = new javax.swing.JLabel();jTextField1 = new javax.swing.JTextField();jLabel3 = new javax.swing.JLabel();jLabel4 = new javax.swing.JLabel();jComboBox1 = new javax.swing.JComboBox();jComboBox2 = new javax.swing.JComboBox();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();jLabel5 = new javax.swing.JLabel();jTextField2 = new javax.swing.JTextField();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setResizable(false);jLabel1.setText("\u6b22\u8fce\u6765\u5230\u5b66\u751f\u4fee\u6539\u754c\u9762\uff01");jLabel2.setText("\u5b66\u751f\u59d3\u540d\uff1a");jLabel3.setText("\u5b66\u751f\u6027\u522b\uff1a");jLabel4.setText("\u5b66\u751f\u73ed\u7ea7\uff1a");StudentDAO st=new StudentDAO();Student st1=st.findById(id);jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"男", "女" }));if(st1.getStusex().equals("男")){jComboBox1.setSelectedIndex(0);}else{jComboBox1.setSelectedIndex(1);}ClazzDAO dao=new ClazzDAO();List list=dao.findAll();String s[]=new String[list.size()];for(int i=0;i

9.同理我们还有ClazzManager类和ClazzAdd类,以及登录的JFrame界面StudentLogin类。
ClazzManager类:
package com.ruide.ClazzManagerSystem;import java.util.ArrayList;import java.util.List;import javax.swing.JOptionPane;import StudentManagerSystem.StudentTable;import com.ruide.dao.ClazzDAO;import com.ruide.vo.Clazz;public class ClazzManager extends javax.swing.JFrame {public ClazzManager() {initComponents();setLocationRelativeTo(null);}private void initComponents() {jScrollPane1 = new javax.swing.JScrollPane();jTable1 = new javax.swing.JTable();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();setResizable(false);//禁止改变窗体大小setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);List list=new ArrayList();ClazzDAO st=new ClazzDAO();try {list=st.findAll();} catch (Exception e) {e.printStackTrace();}ClazzDAO claDAO=new ClazzDAO();List list1=claDAO.findAll();Object studen[][]=new Object[list1.size()][];ClazzDAO clz=new ClazzDAO();for(int i=0;i
ClazzAdd类:
package com.ruide.ClazzManagerSystem;import com.ruide.dao.ClazzDAO;import com.ruide.vo.Clazz;public class ClazzAdd extends javax.swing.JFrame {public ClazzAdd() {initComponents();setLocationRelativeTo(null);}private void initComponents() {jLabel1 = new javax.swing.JLabel();jTextField1 = new javax.swing.JTextField();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();jTextField2 = new javax.swing.JTextField();jLabel4 = new javax.swing.JLabel();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setResizable(false);jLabel1.setText("\u8bf7\u6dfb\u52a0\u73ed\u7ea7\u7f16\u53f7\uff1a");jLabel2.setText("\u4f8b\uff1a5");jLabel3.setText("\u8bf7\u6dfb\u52a0\u73ed\u7ea7\u540d\u79f0\uff1a");jLabel4.setText("\u4f8b\uff1a\u4e94\u73ed");jButton1.setText("\u6dfb\u52a0");jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt);int id=new Integer(jTextField1.getText());String name=new String(jTextField2.getText());ClazzDAO dao=new ClazzDAO();Clazz cl=new Clazz(id,name);int i=dao.save(cl);setVisible(false);ClazzManager st2=new ClazzManager();st2.setVisible(true);st2.setLocationRelativeTo(null);}});jButton2.setText("\u91cd\u7f6e");jButton2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jTextField1.setText("");jTextField2.setText("");}});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(38, 38,38).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,false).addGroup(layout.createSequentialGroup().addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,67,javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(jLabel3).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jTextField2))).addGap(18, 18,18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel2).addComponent(jLabel4))).addGroup(layout.createSequentialGroup().addGap(69, 69,69).addComponent(jButton1).addGap(47, 47,47).addComponent(jButton2))).addContainerGap(38, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(44, 44, 44).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2).addComponent(jLabel1).addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel3).addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel4)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,26, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButton2).addComponent(jButton1)).addGap(23, 23, 23)));pack();}// //GEN-END:initComponentsprivate void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:}/** * @param args the command line arguments */public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new ClazzAdd().setVisible(true);}});}private javax.swing.JButton jButton1;private javax.swing.JButton jButton2;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JLabel jLabel4;private javax.swing.JTextField jTextField1;private javax.swing.JTextField jTextField2;}
StudentLogin类:
package com.ruide.SuperManagerSystem;import javax.swing.JOptionPane;import StudentManagerSystem.StudentTable;import com.ruide.dao.SuperManagerDAO;import com.ruide.vo.SuperManager;public class StudentLogin extends javax.swing.JFrame {public StudentLogin() {initComponents();setLocationRelativeTo(null);}private void initComponents() {jLabel1 = new javax.swing.JLabel();jLabel2 = new javax.swing.JLabel();jTextField1 = new javax.swing.JTextField();jLabel3 = new javax.swing.JLabel();jPasswordField1 = new javax.swing.JPasswordField();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setResizable(false);//禁止改变窗体大小jLabel1.setText("\u5b66\u751f\u7ba1\u7406\u7cfb\u7edf");jLabel2.setText("\u8bf7\u8f93\u5165\u7528\u6237\u59d3\u540d\uff1a");jLabel3.setText("\u8bf7\u8f93\u5165\u7528\u6237\u5bc6\u7801\uff1a");jPasswordField1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jPasswordField1ActionPerformed(evt);}});jButton1.setText("\u767b\u5f55");jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt);String user=new String(jTextField1.getText());String psw=new String(jPasswordField1.getPassword());SuperManagerDAO dao=new SuperManagerDAO();try{SuperManager d=dao.findByName(user,psw);if(d!=null){JOptionPane.showMessageDialog(null, "恭喜您,登陆成功!!");setVisible(false);StudentTable st=new StudentTable();st.setVisible(true);st.setLocationRelativeTo(null);}else{JOptionPane.showMessageDialog(null, "查无此人,请重新登陆!!");}} catch (Exception e) {e.printStackTrace();}}});jButton2.setText("\u91cd\u7f6e");jButton2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt);jTextField1.setText("");jPasswordField1.setText("");}});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(173,173,173).addComponent(jLabel1,javax.swing.GroupLayout.PREFERRED_SIZE,112,javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addGap(66, 66,66).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jLabel3).addComponent(jLabel2)).addGap(54, 54,54).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,false).addComponent(jTextField1).addComponent(jPasswordField1,javax.swing.GroupLayout.DEFAULT_SIZE,132,Short.MAX_VALUE))).addGroup(layout.createSequentialGroup().addGap(117,117,117).addComponent(jButton1).addGap(70, 70,70).addComponent(jButton2))).addContainerGap(98, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jLabel1,javax.swing.GroupLayout.PREFERRED_SIZE,26,javax.swing.GroupLayout.PREFERRED_SIZE).addGap(36, 36, 36).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel2,javax.swing.GroupLayout.PREFERRED_SIZE,21,javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(48, 48, 48).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel3).addComponent(jPasswordField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,45, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButton1).addComponent(jButton2)).addGap(34, 34, 34)));pack();}private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {}private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new StudentLogin().setVisible(true);}});}private javax.swing.JButton jButton1;private javax.swing.JButton jButton2;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JPasswordField jPasswordField1;private javax.swing.JTextField jTextField1;}

10.哦对忘了一件事情,测试类也是很重要的,在项目具体功能展示之前需要写一个测试类测试这些功能,下面我把测试类Test(因为本人比较懒安静,这里只是把Student的功能测试展示出来)展示给大家。
Test类:
package com.ruide.test;import java.util.List;import com.ruide.dao.ClazzDAO;import com.ruide.dao.StudentDAO;import com.ruide.vo.Clazz;import com.ruide.vo.Student;public class Test {public static void main11(String[] args){StudentDAO dao=new StudentDAO();List list=dao.findAll();for(Student st:list){System.out.println(st.getStuid()+" "+st.getStuname()+" "+st.getStusex()+" "+st.getClazzid());}}public static void main10(String[] args){StudentDAO dao=new StudentDAO();int i=3;Student st=dao.findById(i);if(st!=null){System.out.println(st.getStuid()+" "+st.getStuname()+" "+st.getStusex()+" "+st.getClazzid());}else{System.out.println("查无此人");}}public static void main12(String[] args){StudentDAO dao=new StudentDAO();try {int id=20;int i = dao.delete(id);if(i>0){System.out.println("恭喜您,数据删除成功!");}else{System.out.println("数据删除失败!");}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args){StudentDAO dao=new StudentDAO();int id=20;String name="赵世飞";String sex="男";int clazz=3;Student st=new Student();st.setStuid(id);st.setStuname(name);st.setStusex(sex);st.setClazzid(clazz);int i=dao.save(st);if(i>0){System.out.print("恭喜您,数据添加成功!");}else{System.out.println("数据添加失败!!");}}public static void main9(String[] args){StudentDAO dao=new StudentDAO();Student st=new Student();st.setStuid(20);st.setStuname("赵世飞1");st.setStusex("女");st.setClazzid(5);int i=dao.change(st);if(i>0){System.out.println("恭喜您,数据修改成功!");}else{System.out.println("数据修改失败!!");}}public static void main8(String[] args){Student st=new Student();StudentDAO dao=new StudentDAO();String name="李泽旭";st=dao.findByName(name);System.out.println(st.getStuid()+" "+st.getStuname()+" "+st.getStusex()+" "+st.getClazzid());}}

好了,一个完整的学生管理系统就这么搞出来了,开不开心,惊不惊喜,反正我是既开心又惊喜。最后希望对各位正在学习编程的小伙伴有帮助,祝各位小伙伴在编码的路上勇往直前!