jdbc连接Oracle数据库实现学生管理系统

来源:互联网 发布:引用另外一个表格数据 编辑:程序博客网 时间:2024/05/16 02:03

一、一个学生管理系统,连一个像样的后台都没有,这怎么能忍发火   难道就真的没有一个可以拿的出手的?

       既然你诚心诚意的发问了,那么我就大发慈悲的告诉你,这个真的有!

      今天我为大家带来的是一个高端的,钻石版本的学生管理系统。好了,闲话不扯一些,下面进入正题:

    先来屡一下思路:

   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.建show包:这个是通过图形化界面对我们表的一个展示。

   8.之后就是建立add包update包...等等一些具体界面的展示了,在这里就不一一介绍了。

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



其实也是有登录的,只不过界面比较丑,就先不摆出来了大笑

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

    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.db;import java.beans.PropertyVetoException;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DBHelper {public static String DRIVER;public static String URL;public static String USER;public static String PASSWORD;public static ComboPooledDataSource cpd= null;//数据库连接池static{Properties pro = new Properties();//用输入流获取配置文件信息InputStream in = DBHelper.class.getClassLoader().getResourceAsStream("db.properties");try {//将获取到的信息加载到Properties的对象中pro.load(in);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//通过Properties对象的getProperties()方法获取具体值DRIVER = pro.getProperty("DRIVER");URL = pro.getProperty("URL");USER = pro.getProperty("USER");PASSWORD = pro.getProperty("PASSWORD");//初始化数据库连接池cpd = new ComboPooledDataSource();try {//加载驱动字符串cpd.setDriverClass(DRIVER);} catch (PropertyVetoException e) {// TODO Auto-generated catch blocke.printStackTrace();}//加载连接字符串cpd.setJdbcUrl(URL);//加载用户名cpd.setUser(USER);//加载用户密码cpd.setPassword(PASSWORD);cpd.setInitialPoolSize(20);//初始化连接池可连接数量为20cpd.setAcquireIncrement(5);//当不够时每次增加5cpd.setMaxPoolSize(100);//设置最大连接数量为100}public static void main(String args[]){DBHelper db = new DBHelper();}}

    4.在写数据库连接的第二个类之前我们需要进行一些准备工作,即建立Student2类和IMapper接口和StudentMapper类,这里我们只是象征性的展示一部分,至于相关的Clazz类 和ClazzMapper等类大家自己可以比着写一下。

    Student2类:

     

package com.vo;public class Student2 {private int stuid;private String stuname;private String sex;private int claid;//使用公共方法操作私有属性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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getClaid() {return claid;}public void setClaid(int claid) {this.claid = claid;}}

      IMapper接口:

     

package com.mapper;import java.sql.ResultSet;import java.util.List;public interface IMapper {List map(ResultSet rst);//小括号不是尖括号}

      StudentMapper类:

     

package com.mapper;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.vo.Student2;public class StudentMapper implements IMapper {//用于将结果集中的一行数据封装成一个vo实体类,将整个结果集转换成一个集合。public List map(ResultSet rst) {List list = new ArrayList();try{while(rst.next()){Student2 st = new Student2();st.setStuid(rst.getInt("STUID"));//通过列名进行获取st.setStuname(rst.getString("STUNAME"));st.setSex(rst.getString("SEX"));st.setClaid(rst.getInt("CLAID"));list.add(st);}return list;}catch(Exception e){e.printStackTrace();}return null;}}

      5.有了以上的准备工作之后,我们就可以书写第二个数据库连接类DBManager了
     
package com.db;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import com.mapper.IMapper;public class DBManager {public Connection getConnection(){try {return DBHelper.cpd.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}public int executeUpdate(String sql,Object[] obj){Connection conn = null;PreparedStatement pst = null;try{conn = getConnection();//建连接pst = conn.prepareStatement(sql);//建通道if(obj!=null){for(int i = 0;i
      6.接下来就是对DBManager的进一步封装了,也就是StudentDao类,这里也一样,我们就不展示ClazzDao
     
package com.dao;import java.util.List;import com.db.DBManager;import com.mapper.StudentMapper;import com.vo.Student2;public class StudentDao {public int add(Student2 st){//占位符特点:1、下标从1开始 2、使用Object[]存放参数3.可以代替所有类型的参数String sql = "insert into student2 values(?,?,?,?)";DBManager db = new DBManager();Object[] obj = {st.getStuid(),st.getStuname(),st.getSex(),st.getClaid()};int i = db.executeUpdate(sql, obj);return i;}public int delete(int id){String sql = "delete from student2 where stuid = ?";Object[] obj = {id};DBManager db = new DBManager();int i = db.executeUpdate(sql, obj);return i;}public int update(Student2 st){String sql = "update student2 set stuname = ?,sex = ?,claid = ? where stuid = ?";Object[] obj = {st.getStuname(),st.getSex(),st.getClaid(),st.getStuid()};DBManager db = new DBManager();int i = db.executeUpdate(sql, obj);return i;}public Student2 findById(int id){String sql = "select * from student2 where stuid = ?";DBManager db = new DBManager();Object[] obj = {id};StudentMapper sm = new StudentMapper();List list = db.executeQuery(sql, obj,sm);if(list.size()!=0){return list.get(0);}else{return null;}}public List findAll(){String sql = "select * from student2 order by(stuid)";DBManager db = new DBManager();StudentMapper sm = new StudentMapper();List list = db.executeQuery(sql, null, sm);return list;}}
      7.完成了这么多工作,我们的效果怎么样呢,下面就可以看出来了,之后将进入图形化展示阶段
      首先看一下ShowStudent类,这个类其实是托的,先选中src右键new找到Matisse Form然后写上类名ShowStudent 最后别忘了选中JFram,在这个类的删除和修改的时候
      有一个点睛之笔,就是id获取的时候,直接通过选中那一行就能按照id进行操作,真的很神奇。没想到的小伙伴可以观摩一下了大笑
     
package com.show;import java.util.List;import javax.swing.JOptionPane;import com.add.AddStudent;import com.dao.ClazzDao;import com.dao.StudentDao;import com.update.UpdateStduent;import com.vo.Clazz;import com.vo.Student2;public class ShowStudent extends javax.swing.JFrame {public ShowStudent() {initComponents();this.setLocationRelativeTo(null);}private void initComponents() {jScrollPane1 = new javax.swing.JScrollPane();jTable1 = new javax.swing.JTable();add = new javax.swing.JButton();delete = new javax.swing.JButton();update = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);     sd = new StudentDao();List list = sd.findAll();Object[][] obj = new Object[list.size()][];for(int i = 0;iprivate void addActionPerformed(java.awt.event.ActionEvent evt) {AddStudent as = new AddStudent();as.setVisible(true);as.setLocationRelativeTo(null);setVisible(false);}private void deleteActionPerformed(java.awt.event.ActionEvent evt) {int j = jTable1.getSelectedRow();//获取到选中的行int id = (Integer) jTable1.getValueAt(j, 0);//获取选中行中id对应单元格的值int i = sd.delete(id);if(i>=0){System.out.println("删除成功");ShowStudent sst = new ShowStudent();sst.setVisible(true);sst.setLocationRelativeTo(null);setVisible(false);}else{JOptionPane.showMessageDialog(null, "删除失败");}}private void updateActionPerformed(java.awt.event.ActionEvent evt) {int j = jTable1.getSelectedRow();int id = (Integer) jTable1.getValueAt(j,0);UpdateStduent us = new UpdateStduent(id);us.setVisible(true);us.setLocationRelativeTo(null);setVisible(false);}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new ShowStudent().setVisible(true);}});}private javax.swing.JButton add;private javax.swing.JButton delete;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTable jTable1;private javax.swing.JButton update;private StudentDao sd;}
      然后是添加学生方法AddStudent类:
     
package com.add;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.List;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import com.dao.ClazzDao;import com.dao.StudentDao;import com.show.ShowStudent;import com.vo.Clazz;import com.vo.Student2;public class AddStudent extends JFrame{public JLabel label1 = new JLabel();public JLabel id1 = new JLabel("学号:");public JLabel name1 = new JLabel("姓名:");public JLabel sx1 = new JLabel("性别:");public JLabel claname1 = new JLabel("班级:");public JTextField id = new JTextField();public JTextField name = new JTextField();public JComboBox sx = new JComboBox();public JComboBox claname = new JComboBox();public JButton insert = new JButton("插入");public AddStudent (){this.setVisible(true);this.setSize(400,340);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLocationRelativeTo(null);//设置居中显示this.setTitle("学生管理系统-添加");this.setResizable(false);this.setLayout(null);label1.setText("请填写你要插入的信息");this.add(label1);label1.setBounds(100,30,200,30);//横向起始点,纵向起始点,宽度,高度add(id1);id1.setBounds(60,70,60,30);add(id); id.setBounds(130,70,150,30);add(name1);name1.setBounds(60,120,60,30);add(name);name.setBounds(130,120,150,30);add(sx1);sx1.setBounds(60,170,60,30);add(sx);sx.setBounds(130,170,150,30);sx.setModel(new DefaultComboBoxModel(new String[]{"男","女"}));add(claname1);claname1.setBounds(60,220, 60, 30);add(claname);claname.setBounds(130,220,150,30);ClazzDao cd = new ClazzDao();List list = cd.findAll();Object[] items = new Object[list.size()];for(int i = 0;i=0){System.out.println("添加成功");ShowStudent stt = new ShowStudent();stt.setVisible(true);stt.setLocationRelativeTo(null);setVisible(false);}else{System.out.println("添加失败");}}});}public static void main(String []args){AddStudent as = new AddStudent();}}
      最后看一下UpdateStduent类:
     
package com.update;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.List;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import com.dao.ClazzDao;import com.dao.StudentDao;import com.show.ShowStudent;import com.vo.Clazz;import com.vo.Student2;public class UpdateStduent extends JFrame{public JLabel label1 = new JLabel();public JLabel name1 = new JLabel("姓名:");public JLabel sx1 = new JLabel("性别:");public JLabel claname1 = new JLabel("班级:");public JTextField name = new JTextField();public JComboBox sx = new JComboBox();public JComboBox claname = new JComboBox();public JButton update = new JButton("修改");public Student2 st;public UpdateStduent(int id){this.setVisible(true);this.setSize(400,360);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLocationRelativeTo(null);//设置居中显示this.setTitle("学生管理系统-修改");this.setResizable(false);this.setLayout(null);label1.setText("请填写你要修改的信息");this.add(label1);label1.setBounds(120,30,200,30);//横向起始点,纵向起始点,宽度,高度add(name1);name1.setBounds(60,90,60,30);add(name);name.setBounds(130,90,150,30);add(sx1);sx1.setBounds(60,150,60,30);StudentDao sd = new StudentDao();st = sd.findById(id);name.setText(st.getStuname());add(sx);sx.setBounds(130,150,150,30);sx.setModel(new DefaultComboBoxModel(new String[]{"男","女"}));if(st.getSex().equals("男")){sx.setSelectedIndex(0);//显示未改之前的性别}else{sx.setSelectedIndex(1);}add(claname1);claname1.setBounds(60,210, 60, 30);add(claname);claname.setBounds(130,210,150,30);ClazzDao cd = new ClazzDao();List list = cd.findAll();Object[] items = new Object[list.size()];for(int i = 0;i=0){System.out.println("修改成功");ShowStudent stt = new ShowStudent();stt.setVisible(true);stt.setLocationRelativeTo(null);setVisible(false);}else{JOptionPane.showMessageDialog(null, "修改失败");}}});}}

好了,一个完整的学生管理系统就这么搞出来了,开不开心,惊不惊喜,希望对各位正在学习编程的小伙伴有帮助,也祝愿大家在这条路上越走越远!
        

                            May God  bless you! 祝大家生活愉快

      
点击下载源码