zoukankan      html  css  js  c++  java
  • Java学习之数据库连接池

    Java学习之数据库连接池

    0x00 前言

    前面用到的jdbc,在每次连接数据库的时候都需要去重新建立对象。我们在这里会用到创建一个连接池,每次使用完后归还给连接池。

    0x01 连接池概述

    连接池其实就是一个容器(集合),存放数据库连接的容器。
    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

    使用连接池能节约资源使用户访问高效。

    0x02 连接池实现

    C3P0创建线程池

    添加jar文件到libs目录下,所需文件:

    c3p0-0.9.5.2.jar  c3p0包 mchange-commons-java-0.2.12.jar//c3p0 依赖包
    mysql-connector //数据库连接驱动包
    
    

    将c3p0-config.xml放到src目录下,并进行配置。

    创建连接池代码:

    public class test1 {
        public static void main(String[] args) throws SQLException {
            DataSource dataSource = new ComboPooledDataSource();
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
            
    
    
        }
    }
    

    Druid 数据库连接池

    导入jar包

    druid-1.0.9.jar
    

    导入druid.properties文件

    代码:

    public class test2 {
        public static void main(String[] args) throws Exception {
            Properties pro = new Properties();  //创建properties对象
            InputStream is = test2.class.getClassLoader().getResourceAsStream("druid.properties");   //获取配置文件资源
            pro.load(is);  //加载配置文件
            DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);   //创建连接池对象,并传入配置文件信息
            Connection connection = dataSource.getConnection();    //获取连接对象
            System.out.println(connection);
    
    
    
        }
    }
    

    使用完这些方式后可以发现,连接数据库也比较方便了,都是一些封装好的代码。

    我们在这里可以再定义一个工具类,把连接的东西都封装在工具类里面,简化我们的代码。

    工具类:

    public class JDBCutiss {
        private static DataSource ds;
    
        static {
            Properties pro = new Properties();
            InputStream rs = JDBCutiss.class.getClassLoader().getResourceAsStream("druid.properties");
            try {
                pro.load(rs);
                try {
                    ds = DruidDataSourceFactory.createDataSource(pro);
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
            }
                //返回连接对象
            public static Connection getConnection() throws SQLException {
            return ds.getConnection();
            }
            public  static void close(Statement stmt,Connection conn){
            if (stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
    
            }
            if (conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
    
            }
            //该方法返回定义好的DataSource对象
            public static DataSource getDataSource(){
            return ds;
            }
    
    
        }
    
    

    main方法:

    public class test2 {
        public static void main(String[] args) throws Exception {
            Connection connection = JDBCutiss.getConnection();//获取连接对象
            String sql = "select * from users where id =?";  //设置sql语句
            PreparedStatement preparedStatement = connection.prepareStatement(sql);//传入sql语句并创建预编译执行对象
            preparedStatement.setString(1,"1");  //sql语句设置值
    //        System.out.println(sql);
            ResultSet resultSet = preparedStatement.executeQuery();  //执行sql语句
            while (resultSet.next()){
                System.out.println(resultSet.getString("id"));  //获取id
                System.out.println(resultSet.getString("username"));//获取用户账户
                System.out.println(resultSet.getString("password"));//获取密码
            }
            JDBCutiss.close(preparedStatement,connection);
    
    
        }
    }
    
    
    

    Spring JDBC

    Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。

    创建对象:

    JdbcTemplate template = new JdbcTemplate(ds);
    

    常用方法:

    * update():执行DML语句。增、删、改语句
    		* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
    			* 注意:这个方法查询的结果集长度只能是1
    		* queryForList():查询结果将结果集封装为list集合
    			* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
    		* query():查询结果,将结果封装为JavaBean对象
    			* query的参数:RowMapper
    				* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
    				* new BeanPropertyRowMapper<类型>(类型.class)
    		* queryForObject:查询结果,将结果封装为对象
    			* 一般用于聚合函数的查询
    

    Template连接代码:

    public class test3 {
        public static void main(String[] args) {
            JdbcTemplate template = new JdbcTemplate(JDBCutiss.getDataSource());//从工具类获取对象传入
            String sql = "update users set password =? where id =?";
    
    
            int admin = template.update(sql,"500",2);  //参数sql语句需要的参数,再进行执行sql语句
            System.out.println(admin);
    
    
    
        }
    }
    

    总体来说也就3行代码就实现了这么一个操作数据库的,比前面几个方法都简单很多,其他的所需功能都在工具类里面封装好了,可以直接进行调用。

    0x03 结尾

    在使用了spring Jdbc后发现代码比前面几个都轻松很多,定义的工具类开发程序的时候可以直接复制来使用,或者做一点稍微的改进再进行使用。总体来说spring还是很方便。

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13511365.html
Copyright © 2011-2022 走看看