zoukankan      html  css  js  c++  java
  • jdbc的封装(增删查改)

    DBHelper

    package com.nll.dao;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class DBHelper {
    //加载驱动一般来说只加载一次
        static {
            try {
                //第一步加载驱动
                //mysql5.0+版("com.mysql.cj.jdbc.Driver")8.0+版("com.mysql.cj.jdbc.Driver")
                Class.forName("oracle.jdbc.OracleDriver");
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        public static Connection getConnection() {
            //第二步 建立连接 我们也封装一下没有为什么 主要是太长了 自己写麻烦
            Connection conn=null;
            try {
                //mysql可以改为"jdbc:mysql://localhost:3306/(数据库名)?allowPublicKeyRetrieval=true&serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8"
                conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","scott");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
        //第三步 写sql语句 对我们来说 sql语句只是预处理语句对象里面的一个参数而已 而且功能不一样 sql语句不一样
        //因此 sql语句我们最终也就当做一个参数即可
        
        
        //增删改 都是同一个方法 executeUpdate 而且返回值也是一样
        //所以我们封装的时候 增删改一起封装
        public int doUpdate(String sql,Object...params) {
            //首先获取连接
            Connection conn=getConnection();
            //确定一个返回值
            int result=-1;
            try {
                //预处理语句对象
                PreparedStatement pstmt=conn.prepareStatement(sql);
                //参数呢,会不会有占位符?
                //因为不单单是增删改会员参数 我们查询也会有参数所以我们也封装一下
                
                doParams(pstmt,params);
                //执行sql语句
                result=pstmt.executeUpdate();
                closeAll(null,conn,pstmt);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return result;
            
        }
        public List<Map<String,String>> findAll(String sql,Object...params) {
            List<Map<String,String>> list=new ArrayList<Map<String,String>>();
            try {
            //首先获取连接
            Connection conn=getConnection();
            ResultSet resultset=null;
        
                //预处理语句对象
                PreparedStatement pstmt=conn.prepareStatement(sql);
                //参数呢,会不会有占位符?
                //因为不单单是增删改会员参数 我们查询也会有参数所以我们也封装一下
                
                doParams(pstmt,params);
                resultset=pstmt.executeQuery();
                
                //如何得到Map的键-》这个sql语句的字段
                //首先要通过结果集 得到元数据
                ResultSetMetaData rsmd=resultset.getMetaData();
                String[] columnNames=new String[rsmd.getColumnCount()];
                for (int i = 0; i < columnNames.length; i++) {
                    //注意我们这里得到的键全都是大写 因此我们改为我们习惯的小写
                    columnNames[i]=rsmd.getColumnName(i+1).toLowerCase();
                    
                }
                while(resultset.next()) {
                    Map<String,String> map=new HashMap<String,String>();
                    //根据列名来取值
                    for(String cn:columnNames) {
                        String value=resultset.getString(cn);
                        map.put(cn, value);
                    }
                    //当一条取完放到list里面去
                    list.add(map);
                }
                closeAll(resultset,conn,pstmt);
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return list;
            
            
        
            
        }
        private void closeAll(ResultSet rs, Connection conn, PreparedStatement pstmt) {
            // TODO Auto-generated method stub
            
                try {
                    if(rs!=null) {
                    rs.close();
                    }
                    if(conn!=null) {
                        conn.close();
                    }
                    if(pstmt!=null) {
                        pstmt.close();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        private void doParams(PreparedStatement pstmt, Object...params) {
            //先判断 用户没有传参数过来 那我们就不用注入参数
            if(params!=null&&params.length>0) {
                //有参数 我们才注入参数 Object... 量词参数,本质是一个数组
                for (int i = 0; i < params.length; i++) {
                    //万物皆对象
                    try {
                        pstmt.setObject(i+1, params[i]);
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                
            }
            
            
        }
        
    }

    Test.java

    package com.nll.dao;
    
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    public class Test1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //测试jdbc的封装
            //因为我们不是静态方法 所以先示例化
            DBHelper db=new DBHelper();
    //        //写sql语句不带参数
    //        String sql1="update autoincre_demo set id=id+1";
    //        int result1=db.doUpdate(sql1);
    //        if(result1>0) {
    //            System.out.println("修改成功");
    //        }else {
    //            System.out.println("修改失败");
    //        }
    //        //写sql语句 (带参数的)
    //        String sql="update autoincre_demo set NAME=?";
    //        //执行
    //        int result=db.doUpdate(sql,"海口");
    //        if(result>0) {
    //            System.out.println("修改成功");
    //        }else {
    //            System.out.println("修改失败");
    //        }
            //查询操作
          String sql2="select * from autoincre_demo";
           List<Map<String,String>> list=db.findAll(sql2);
           for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).get("name"));
        }
    
           
        }
    
    }
  • 相关阅读:
    夺命雷公狗---微信开发22----微信客户端下载多媒体文件
    夺命雷公狗---微信开发21----通过程序进行下载多媒体文件
    夺命雷公狗---微信开发20----编写程序进行上传多媒体文件
    夺命雷公狗---微信开发19----使用网页调试工具调试该接口进行文件的上传与下载
    夺命雷公狗---微信开发18----删除自定义菜单
    夺命雷公狗---微信开发17----自定义菜单的事件推送,响应菜单的CLICK
    夺命雷公狗---微信开发16----自定义菜单的查询
    夺命雷公狗---微信开发15----编写进行创建自定义菜单
    夺命雷公狗---微信开发14----用网页调试工具调试自定义菜单接口
    夺命雷公狗---微信开发13----获取access_token
  • 原文地址:https://www.cnblogs.com/ll-hb/p/12727651.html
Copyright © 2011-2022 走看看