zoukankan      html  css  js  c++  java
  • JDBC实现Oracle数据库的增删改查

    package com.zt.dao;
    
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.zt.entity.Emp;
    import com.zt.util.JDBCUtil;
    
    public class EmpDAO {
        //初始化connection,statement,result set,JDBCUtil类(加载驱动,获取链接,关闭链接)
        //定义为EmpDAO的私有属性,并且设置初值null
        private Connection con = null;
        private PreparedStatement ps = null;
    //  private Statement  st = null;
        private ResultSet rs = null;
        private JDBCUtil jdbc = new JDBCUtil();
    
        /**
         * 添加数据
         * @return 
         */
        public void saveEmp(Emp emp){
            //首先需要获取到连接,连接到数据库才能够操作
            //通过jdbc来获取连接
            con = jdbc.getconneConnection();
            //连接到数据库之后下面就是准备SQL语句
            String sql = "insert into emp (empno,ename,job,hiredate,sal,comm) values (?,?,?,?,?,?)";
            //这里需要添加的具体数据我们用问号占位符表示
            //准备好SQL语句之后,需要利用con连接进行一个预处理
            //相当于将SQL语句输入到数据库窗口里面
            try {
                //这里将预处理的值赋值给ps变量
                ps = con.prepareStatement(sql);
                //写好sql语句之后,这里需要将我们输入的对应的值传递给emp对应的字段
                //赋值需要通过ps来向emp中传入具体的字段
                ps.setInt(1,emp.getEmpno());
                ps.setString(2, emp.getEname());
                ps.setString(3, emp.getJob());
                //这里传入的时间是sql的时间,而我们获取到的是util的时间
                //所以需要将util的时间获取到秒数,然后转为sql的时间
                //这里的Date是一个对象还需要new一下
                ps.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
                //这里传入的是日期类型,所以应该设置日期类型
                ps.setString(5, emp.getSal());
                ps.setString(6, emp.getComm());
    
                //将参数传好了之后,就是开始执行相应的SQL语句
                //这里我们多了一个步骤就是写好了SQL语句之后,还需要通过预处理将写入的字段传递给对应的表中的字段
                //同样的执行的时候,也是利用预处理的返回值进行执行
                ps.execute();
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }   
            /**
             * 查询数据
             */
            public List<Emp> findAll(){
                List<Emp> emps = new ArrayList<Emp>();
                //获取链接
                con = jdbc.getconneConnection();
                //准备SQL语句
                String  sql1 ="select empno,ename,job,hiredate,sal,comm from emp";
                //预处理
                try {
                    ps = con.prepareStatement(sql1);
                    //执行SQL语句
                    //执行了查询语句之后会返回一个结果集
                    //要显示返回的结果集,需要一次取出相应的字段
                    rs = ps.executeQuery();
                    //boolean next = rs.next();
                    //这里不能用while(next),相当于永远为true,是一个死循环
    
                    while(rs.next()){
                        //System.out.println("---");测试
                      int empno = rs.getInt(1);
                      String ename = rs.getString(2);
                      String job = rs.getString(3);
                      Date hiredate = rs.getDate(4);
                      String sal = rs.getString(5);
                      String comm = rs.getString(6);
                      //从结果集中取出相应的字段之后,需要通过一张表显示出来
                      //所以还需要将取出的字段封装为一个Emp对象
                      //取出的数据在结果集里面,我们需要从将数据取出来放在emp对象里面,然后返回emp对象
                      Emp emp1 = new Emp(empno, ename, job, hiredate, sal, comm);
                      //将取出的对象加入到集合emps中去
                      emps.add(emp1);
                    }   
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally{
                    jdbc.closeAll(con, ps, rs);
                }
    
                return emps;
            }   
            /**
             * 根据id查询数据 返回一个emp对象
             */
           public Emp findByid(int id){
               //定义一个emp类型用于装查询的返回的结果
               //设置初值为null
               Emp emp = null;
               //同样的先链接数据库
               con = jdbc.getconneConnection();
               //准备SQL语句
               String sql ="select empno,ename,job,hiredate,sal,comm from emp where empno=?";
               //这里需要输入的是empno,我们先用?占位符代替
               //预处理
               try {
                ps = con.prepareStatement(sql);
                //执行SQL语句
                //返回一个结果集
                ps.setInt(1, id);
                rs = ps.executeQuery();
                //将结果集遍历显示出来
                while(rs.next()){
                    int empno = rs.getInt(1);
                    String ename  =rs.getString(2);
                    String job = rs.getString(3);
                    Date hiredate= rs.getDate(4);
                    String sal = rs.getString(5);
                    String comm = rs.getString(6);
                    //将查询到的数据封装成一个emp对象,将emp对象返回
                    //创建一个新的对象赋值给刚才定义的变量emp
                    //这里不用再定义emp的类型了,否则是新一个Emp类型
                     emp = new Emp(empno, ename, job, hiredate, sal, comm);
    
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
               return emp;
           }
    
            /**
             * 更新数据库emp,可以更新的字段为ename,job,sal,comm
             */
           public void updateEmp(Emp emp){
               //第一步还是连接数据库
               //利用con得到jdbc的getconnection
               con = jdbc.getconneConnection();
               //连接好数据库之后,就可以写SQL语句了
               String sql = "update emp set ename=?,job=?,sal=?,comm=? where empno=?";
               //利用preparestatement的操作好处是需要填写的字段直接用问号表示
               //先用一个占位符表示
               //接下来进行SQL语句的预处理
               //调用con的preparestatement方法
               try {
                ps = con.prepareStatement(sql);
                //接下来利用ps的set属性来改变emp的各个字段
                //这里需要利用empno来传入一个emp对象
                ps.setString(1, emp.getEname());
                ps.setString(2, emp.getJob());
                ps.setString(3, emp.getSal());
                ps.setString(4, emp.getComm());
                ps.setInt(5, emp.getEmpno());
                //这里的利用PS的set方法依次为5个占位符设置相应的值
                //利用ps预处理的set方法将每个需要修改的字段赋值好之后,就是执行这条SQL语句了
                ps.execute();
                //注意我们这里采用的是prepare statement的方式,所以这里不需要将sql作为参数传入进去
                //只有statement才需要将sql语句传入进去
                //ps.execute(sql);这是statement的写法
                //执行同样是利用ps来执行
                //这里执行成功之后打印一句话
                System.out.println("执行成功");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                //关闭数据库连接,需要jdbc的方法
                jdbc.closeAll(con, ps, rs);
            }
           }
    
            /**
             * 删除数据
             */
            public void delEmp(int id){
                //第一步获取连接
                con = jdbc.getconneConnection();
                //第二步准备SQL语句
                String sql = "delete from emp where empno = ?";
                try {
                    //第三部预处理
                    ps = con.prepareStatement(sql);
                    //第四步为占位符设置具体的值,
                    //而这里的empno是需要用户输入的,所以我们需要通过函数的参数传入进来
                    ps.setInt(1, id);
                    //第五步执行SQL语句
                    ps.execute();
                    //第六步执行成功打印
                    System.out.println("执行成功");
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally{
                    jdbc.closeAll(con, ps, rs);
                }
            }
    
    
            /**
             * 模糊查询
             * 通过名字查找数据
             * @return 
             */
            public List<Emp> findEmpByName(String ename){
                //这里传入的参数为string类型,不用是List<Emp>类型
                List<Emp> emps = new ArrayList<Emp>();
                //第一步连接数据库
                con = jdbc.getconneConnection();
                //String ename = null;
                //第二部准备SQL语句
                String sql = "select empno,ename,job,hiredate,sal,comm from emp where ename like '%"+ename+"%'";
    
                try {
                    //第三步预处理SQL语句
                    ps = con.prepareStatement(sql);
                    //第四步执行SQL查询语句,不带sqL参数,返回查询的结果集,这里需要返回一个结果集参数
                    //所以需要定义List<Emp>类型的集合用于返回
                     rs = ps.executeQuery();
                     //第五步需要从rs的结果集从取出相应的字段存入一个emp的对象中,然后加入到emps的集合中
                     while(rs.next()){
                        //这里不能将Emp emp = new emp()定义在while循环里面
                         //否则会
                         Emp emp1  = new Emp(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getDate(4), rs.getString(5), rs.getString(6));
                         emps.add(emp1);
                     }
    
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally {
                    jdbc.closeAll(con, ps, rs);
                }
    
                return emps;
            }
        }
    
    
    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    2020.2.5随笔
    2020.2.4
    2020.2.3随笔
    2020.2.2随笔
    2020/2/1随笔
    python3 百度AI-v3之 人脸对比 & 人脸检测 & 在线活体检测 接口
    python:Json模块dumps、loads、dump、load介绍
    python3之selenium.webdriver 库练习自动化谷歌浏览器打开百度自动百度关键字
    python之https爬虫出现 SSL: CERTIFICATE_VERIFY_FAILED (同时打开fiddler就会出现)
    调试python 程序的几种方法总结
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428315.html
Copyright © 2011-2022 走看看