logo资料库

JDBC+GUI实现简单学生管理系统.pdf

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
JDBC+GUI实现简单学生管理系统 实现简单学生管理系统 主要为大家详细介绍了JDBC+GUI实现简单学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 刚学完JDBC不久,做了一个简单的学生管理系统,可能还有不完善的地方,望各路大神见谅。废话不多说,我先贴个图让大家让大 家瞅瞅,觉得是你想要的再看下去吧。 我是以管理者的身份去做的,适合初学者去学习。 在做之前,先捋一遍思路,简单来说分为三大步。 一、在数据库里建Student表存放学生信息 一、在数据库里建 表存放学生信息
二、用二、用JDBC来连接、操作数据库 来连接、操作数据库 三、展示Student数据,实现增删改查功能。 三、展示 数据,实现增删改查功能。 思路是非常简单的,但是要实现还是有很多细节需要注意,下面我就贴上我的代码,结合着代码给大家一步步的分析说明。 实现: 一、在数据库建表:这个不用细说,直接贴图。 二、用JDBC连接数据库:这一块对于刚刚学JDBC的同学来说可能比较绕,所以我把这一块又分成了四部分(最后的db.properties跟 com.student.db一起的),我会逐个说明。看图。 (1)com.student.db包里有两个类,一个是DBHelper 一个是DBManager,这俩类是用JDBC连接数据库的,固定写法。 DBManager类 package com.student.db; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.student.mapper.IMapper; public class DBManager { //这里把JDBC连接数据库的步骤(找驱动,建连接,建通道,执行SQL)封装在DBHelper类里面,在DBManager里用getConnection()调用。这样写的目的是方便 public Connection getConnection(){ try { return DBHelper.getConnection();//得到DBHelper类里面写好的连接 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return null; } //增删改结果集。因为sql语句是变化的,所以设为参数比较方便。params是占位符的,没学的可以忽略。 public int executeUpdate(String sql,Object[] params){ Connection conn=null; PreparedStatement pst=null; try { conn=getConnection();//连接 pst=conn.prepareStatement(sql);//通道 if(params != null){//占位符的应用。 for(int i=0;i
pst.setObject(i+1,params[i]);//往通道里放数据,占位符下标从1开始。 } } return pst.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return -1; } //查询结果集。比增删改要复杂一些,慢慢看。 //这里的IMapper是将所有可能的用到的类都放进去,方便以后继承使用。(现在我们写的是Student信息,以后可能会有Teacher信息,Class信息等等) //用接口是因为接口多继承,方便维护升级 public List executeQuery(String sql,IMapper mapper,Object []params){ Connection conn=null; PreparedStatement pst=null; ResultSet rst=null;//查询结果集 List list=new ArrayList();//用一个集合存放Student信息 try { conn=getConnection(); pst=conn.prepareStatement(sql); if(params != null){ for(int i=0;i
e.printStackTrace(); } DRIVER=pro.getProperty("DRIVER"); URL=pro.getProperty("URL"); USER=pro.getProperty("USER"); PASSWORD=pro.getProperty("PASSWORD"); } public static Connection getConnection() throws ClassNotFoundException, SQLException{ Class.forName(DRIVER);//找驱动 return DriverManager.getConnection(URL, USER, PASSWORD);//建连接 } } (2)com.student.vo包。这里面有一个vo类,我们是要把数据库里的数据放到java里展示,用一个类对象把数据库里的信息一一对应 起来就可以很容易的操作。数据库里的一个列对应类对象的一个属性。 package com.student.vo; public class Student { private String stuid; private String name; private String age; private String sex; public String getStuid(){ return stuid; } public void setStuid(String stuid){ this.stuid=stuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Student(String stuid,String name,String sex,String age){ super(); this.stuid=stuid; this.name=name; this.age=age; this.sex=sex; } public Student(){ super(); } } (3)com.student.mapper包。这里面一个接口,一个实现类。 接口: package com.student.mapper; import java.sql.ResultSet; import java.util.List; public interface IMapper { List map(ResultSet rst);//声明一个方法存着结果集。 } 实现类: package com.student.mapper; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;
import com.student.vo.Student; public class StuMapper implements IMapper {//实现接口方法 public List map(ResultSet rst) { List list=new ArrayList();//建一个集合,里面是Student类里的信息。 try { while(rst.next()){// Student stu=new Student(); stu.setStuid(rst.getString("STUID"));//类对象每一个属性对应数据库的每一列。 stu.setName(rst.getString("STUNAME")); stu.setAge(rst.getString("AGE")); stu.setSex(rst.getString("SEX")); list.add(stu);//把类对象放到集合里 } } catch (SQLException e) { e.printStackTrace(); } return list; } } (4)com.student.dao包:这里面的StuDAO类放着增删改查分页等功能 package com.student.dao; import java.util.List; import com.student.db.DBManager; import com.student.mapper.IMapper; import com.student.mapper.StuMapper; import com.student.vo.Student; public class StuDAO { public List check(){//查看 String sql="select * from STUDENT";//sql语句 DBManager db=new DBManager(); IMapper mapper=new StuMapper();//实现StuMapper List list=db.executeQuery(sql, mapper,null);//null是指占位符为null,因为查看的是所有信息 return list; } public boolean add(Student stu){//添加 String sql="insert into STUDENT values(?,?,?,?)"; Object[] params={stu.getStuid(),stu.getName(),stu.getAge(),stu.getSex()}; DBManager db=new DBManager(); int i=db.executeUpdate(sql, params); if(i>=0){ System.out.println("成功"); }else{ System.out.println("失败"); } return true; } public boolean update(Student stu){//修改 String sql="update STUDENT set stuname=?,age=?,sex=? where stuid=?"; Object params[]={stu.getName(),stu.getAge(),stu.getSex(),stu.getStuid()}; DBManager db=new DBManager(); int i=db.executeUpdate(sql, params); if(i>=0){ System.out.println("成功"); }else{ System.out.println("失败"); } return true; } public boolean delete(Student stu){//删除 String sql="delete from STUDENT where stuid=?"; Object params[]={stu.getStuid()}; DBManager db=new DBManager(); int i=db.executeUpdate(sql, params); if(i>=0){ System.out.println("成功"); }else{ System.out.println("失败"); } return true; } public List findPage(int pagesize,int pagenow){//分页 String sql="select * from (select rownum rn ,stu .* from stu) " + "where rownum<=? and rn>?";//分页公式 Object []params={pagesize,(pagenow-1)*pagesize}; DBManager db=new DBManager(); IMapper mapper=new StuMapper(); return db.executeQuery(sql, mapper, params); } public int findcount(){ String sql="select count(*) from stu";
DBManager db=new DBManager(); return db.count(sql); } } 当把这一块写完之后,其实大部分就已经完成了,JDBC连接数据库基本上是固定的,多写几遍就明白了。 三、展示Student信息,实现增删改查。看图: 三、展示 信息,实现增删改查。看图: (1)com.student.show包,展示界面:这里面内容比较多,但是都很容易理解 package com.student.show; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import com.student.add.Add; import com.student.check.Check; import com.student.dao.StuDAO; import com.student.delete.Delete; import com.student.update.Update;
import com.student.vo.Student; public class Show extends JFrame { public static int pagesize=5;//每页显示5条信息 public static int pagenow=1;//当前页为第一页 public Show() { setSize(500, 430); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE);//点X号就是关闭 setResizable(false);//不可改变窗口大小 setLocationRelativeTo(null);//默认居中显示 setLayout(null);//采用坐标布局 StuDAO dao = new StuDAO();//前面我们已经把增删改查分页写到StuDAO里面,现在就直接拿出来用 List list =dao.findPage(pagesize, pagenow); Student stu = new Student(); for (int i = 0; i < list.size(); i++) { stu = list.get(i); } String[] rowName = { "学号", "姓名", "年龄", "性别" };//从这里开始是二维数组的遍历使用 Object[][] data = new Object[list.size()][4]; for (int i = 0; i < list.size(); i++) { Student s = list.get(i); Object st[] = { s.getStuid(), s.getName(), s.getAge(), s.getSex() }; data[i] = st; } final JTable table = new JTable(data,rowName); JScrollPane JSP=new JScrollPane(table);//这一步不能省去,否则显示不出列名 JSP.setBounds(20, 10, 400, 200); add(JSP); JButton jb11=new JButton("首页"); jb11.setBounds(40,220,80,30); add(jb11); JButton jb22=new JButton("上一页"); jb22.setBounds(130,220,80,30); add(jb22); JButton jb33=new JButton("下一页"); jb33.setBounds(220,220,80,30); add(jb33); JButton jb44=new JButton("尾页"); jb44.setBounds(310,220,80,30); add(jb44); JButton jb1 = new JButton("查看信息"); jb1.setBounds(50, 270, 100, 30); add(jb1); JButton jb2 = new JButton("修改信息"); jb2.setBounds(280, 270, 100, 30); add(jb2); JButton jb3 = new JButton("添加信息"); jb3.setBounds(50, 320, 100, 30); add(jb3); JButton jb4 = new JButton("删除信息"); jb4.setBounds(280, 320, 100, 30); add(jb4); JButton jb5 = new JButton("退出"); jb5.setBounds(280, 360, 100, 30); add(jb5); jb1.addActionListener(new ActionListener() {//查看 public void actionPerformed(ActionEvent event) { int row = table.getSelectedRow();//选中第几行 int index = 0; if(row==-1){ JOptionPane.showMessageDialog(null,"您没有选中信息"); return; } String id = (String) table.getValueAt(row, index);// 跟Check联系起来 Check check=new Check(id); check.setVisible(true); setVisible(false); } }); jb2.addActionListener(new ActionListener() {//修改 public void actionPerformed(ActionEvent event) { int row = table.getSelectedRow(); int index = 0; if(row==-1){ JOptionPane.showMessageDialog(null,"您没有选中信息");
return; } String id = (String) table.getValueAt(row, index);// 跟Update联系起来 Update up=new Update(id); up.setVisible(true); setVisible(false); } }); jb3.addActionListener(new ActionListener() {//添加 public void actionPerformed(ActionEvent event) { Add add = new Add(); add.setVisible(true); setVisible(false); } }); jb4.addActionListener(new ActionListener() {//删除 public void actionPerformed(ActionEvent event) { int row = table.getSelectedRow(); int index = 0; if(row==-1){ JOptionPane.showMessageDialog(null,"您没有选中信息"); return; } String num=(String) table.getValueAt(row, index); Delete d=new Delete(num); d.setVisible(true); setVisible(false); } }); jb11.addActionListener(new ActionListener() {//首页 public void actionPerformed(ActionEvent event) { pagenow=1; Show show=new Show(); setVisible(false); show.setVisible(true); } }); jb22.addActionListener(new ActionListener() {//上一页 public void actionPerformed(ActionEvent event) { if(pagenow != 1){ pagenow=pagenow-1; }else{ return; } Show show=new Show(); setVisible(false); show.setVisible(true); } }); jb33.addActionListener(new ActionListener() {//下一页 public void actionPerformed(ActionEvent event) { StuDAO dao=new StuDAO(); int count=dao.findcount(); int pageCount=(count-1)/pagesize+1;//pageCount表示最后一页 if(pagenow != pageCount){ pagenow=pagenow+1; }else{ return; } Show show=new Show(); setVisible(false); show.setVisible(true); } }); jb44.addActionListener(new ActionListener() {//尾页 public void actionPerformed(ActionEvent event) { StuDAO dao=new StuDAO(); int count=dao.findcount(); int pageCount=(count-1)/pagesize+1; pagenow=pageCount; Show show=new Show(); setVisible(false); show.setVisible(true); } }); } public static void main(String args[]) { Show s = new Show(); }
分享到:
收藏