zoukankan      html  css  js  c++  java
  • 封装jdbc 单例模式的应用

    实现增删该查的jdbc封装

    import java.io.IOException;
    import java.io.InputStream;
    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.sql.Statement;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    public class DbUtil {
        private static String user = null;
        private static String password = null;
        private static String driver = null;
        private static String url = null;
        private static Connection conn = null;
        
        private static Properties p =null;
        
        //单利模式 --懒汉式(双重锁定)保证线程的安全性
        public static DbUtil db = null;
        private DbUtil(){
            
        }
        public static DbUtil getInstance(){
            if(db == null){
                synchronized(DbUtil.class){
                    if(db == null){
                        db = new DbUtil();
                    }            
                }        
            }
            return db;
        }
        //读取配置文件且加载数据库驱动
        static{
            //实例化一个properties对象用来解析我们的配置文件
            p = new Properties();
            //通过类加载器来读取我们的配置文件,以字节流的形式读取
            InputStream in = DbUtil.class.getClassLoader().getResourceAsStream("/config.properties");
            try {
                //将配置文件自如到Propreties对象,来进行解析
                p.load(in);
                //读取配置文件
                driver = p.getProperty("driver");
                url = p.getProperty("url");
                user = p.getProperty("user");
                password = p.getProperty("password");
                //加载驱动
                Class.forName(driver);
            } catch (IOException e1) {
                e1.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } 
            
        }
        //建立数据库的连接
        public Connection getConn(){
            try {
                return DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
                return null;
            }
        }
        //查询返回List容器
        public List<Map<String,Object>> query(String sql,Object...params){
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                //获得连接
                conn = getConn();
                //获得preparedSttement对象进行预编译(?占位符)
                pst = conn.prepareStatement(sql);
                int paramsIndex = 1;
                for(Object p : params){
                    pst.setObject(paramsIndex++, p);
                }
                //执行sql语句获得结果集的对象
                rs = pst.executeQuery();
                //获得结果集中列的信息
                ResultSetMetaData rst = rs.getMetaData();
                //获得结果集的列的数量
                int column = rst.getColumnCount();
                //创建List容器
                List<Map<String,Object>> rstList = new ArrayList<Map<String,Object>>();
                //处理结果
                while(rs.next()){
                    //创建Map容器存取每一列对应的值
                    Map<String,Object> m = new HashMap<String,Object>();
                    for(int i=1;i<=column;i++){
                        m.put(rst.getColumnName(i), rs.getObject(i));
                    }
                    //将Map容器放入List容器中
                    rstList.add(m);
                }
                return rstList;
            } catch (SQLException e) {
                e.printStackTrace();
                return null;
            }finally{
                //关闭资源
                close(rs, pst, conn);
            }
        }
         
         public List<Map<String,Object>> query(String sql,List<Object> params){
                PreparedStatement pst = null;
                ResultSet rs = null;
                try {
                    //获得连接
                    conn = getConn();
                    //获得preparedSttement对象进行预编译(?占位符)
                    pst = conn.prepareStatement(sql);
                    int paramsIndex = 1;
                    for(Object p : params){
                        pst.setObject(paramsIndex++, p);
                    }
                    //执行sql语句获得结果集的对象
                    rs = pst.executeQuery();
                    //获得结果集中列的信息
                    ResultSetMetaData rst = rs.getMetaData();
                    //获得结果集的列的数量
                    int column = rst.getColumnCount();
                    //创建List容器
                    List<Map<String,Object>> rstList = new ArrayList<Map<String,Object>>();
                    //处理结果
                    while(rs.next()){
                        //创建Map容器存取每一列对应的值
                        Map<String,Object> m = new HashMap<String,Object>();
                        for(int i=1;i<=column;i++){
                            m.put(rst.getColumnName(i), rs.getObject(i));
                        }
                        //将Map容器放入List容器中
                        rstList.add(m);
                    }
                    return rstList;
                } catch (SQLException e) {
                    e.printStackTrace();
                    return null;
                }finally{
                    //关闭资源
                    close(rs, pst, conn);
                }
            }
        
        //分页查询总共有多少条记录totleSize
        public long queryLong(String sql,Object...params){
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                //获得连接
                conn = getConn();
                //获得preparedSttement对象进行预编译(?占位符)
                pst = conn.prepareStatement(sql);
                int paramsIndex = 1;
                for(Object p : params){
                    pst.setObject(paramsIndex++, p);
                }
                //执行sql语句获得结果集的对象
                rs = pst.executeQuery();
                while(rs.next()){
                    return Long.valueOf(rs.getLong(1));
                }
                return 0;
            } catch (SQLException e) {
                e.printStackTrace();
                return 0;
            }
        }
        //插入
        public boolean insert(String sql,Object...params){
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                //获得连接
                conn = getConn();
                //获得PrepareStatement对象进行预编译
                pst = conn.prepareStatement(sql);
                //处理将数据插入占位符
                int paramsIndex = 1;
                for(Object p : params){
                    pst.setObject(paramsIndex++, p);
                }
                //执行sql语句
                pst.executeUpdate();
                return true;
            } catch (SQLException e) {
                e.printStackTrace();
                return false;
            }finally{
                //关闭资源
                close(null, pst, conn);
            }
        }
        
        //修改
        public boolean update(String sql,Object...params){
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                //获得连接
                conn = getConn();
                //获得PrepareStatement对象进行预编译
                pst = conn.prepareStatement(sql);
                //处理将数据插入占位符
                int paramsIndex = 1;
                for(Object p : params){
                    pst.setObject(paramsIndex++, p);
                }
                //执行sql语句
                pst.executeUpdate();
                return true;
            } catch (SQLException e) {
                e.printStackTrace();
                return false;
            }finally{
                //关闭资源
                close(null, pst, conn);
            }
        }
        
        //删除
        public boolean delete(String sql,Object...params){
            PreparedStatement pst = null;
            ResultSet rs = null;
            try {
                //获得连接
                conn = getConn();
                //获得PrepareStatement对象进行预编译
                pst = conn.prepareStatement(sql);
                //处理将数据插入占位符
                int paramsIndex = 1;
                for(Object p : params){
                    pst.setObject(paramsIndex++, p);
                }
                //执行sql语句
                pst.executeUpdate();
                return true;
            } catch (SQLException e) {
                e.printStackTrace();
                return false;
            }finally{
                //关闭资源
                close(null, pst, conn);
            }
        }
        //关闭资源
        public static void close(ResultSet rs,PreparedStatement pst,Connection conn){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                rs = null;
            }
            if(pst!=null){
                try {
                    pst.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                pst = null;
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn = null;
            }
        }
    }

    配置文件config.properties:

    user=root
    password=root
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/cp_data
  • 相关阅读:
    Codeforces Round #578 (Div. 2) 训练总结及题解
    docker
    使用java遍历Map集合的方式
    SpringCloud集成rabbitmq:org.springframework.amqp.AmqpConnectException: java.net.ConnectException的解决办法
    创建新Docker容器时出现“The container name "/xxx" is already in use by container xxxxxxxxxxx...”问题的解决办法
    springBoot 项目中,使用定时任务报错
    java获取当前日期和前一周、前一月、前一年的日期
    用户行为PV&UV
    使用IDEA开发,多模块依赖中,找不到依赖: 程序包xxx.xxx.xxx不存在的问题
    Java获取本地IP地址和主机名
  • 原文地址:https://www.cnblogs.com/cpstart/p/6034216.html
Copyright © 2011-2022 走看看