zoukankan      html  css  js  c++  java
  • 【java学习笔记】数据库连接池与操作工具类

    相比较原始的数据库操作而言,使用连接池技术及数据库操作工具类,往往可以更高效、更简洁,本文主要介绍连接池工具c3po包以及数据库操作工具类commons-dbutils。

    一、原始的数据库操作方式

    原始的数据库操作方式如下,建立一个数据库对象流程较为复杂,IP、端口、账号、密码需要在代码中定义,每次执行都需要建立连接,关闭连接。

            try {
                //获取数据库驱动 
                Class.forName("com.mysql.cj.jdbc.Driver");
                //获取数据库连接对象
                conn = DriverManager.getConnection(
                        "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC", "root", "123456");
                //定义sql
                String sql = "select * from User_test";
                //通过数据库连接对象获取数据库执行对象
                Statement statment = conn.createStatement();
                //执行sql,将返回值存放在ResultSet中
                ResultSet res_set = statment.executeQuery(sql);
                //遍历ResultSet对象
                while(res_set.next()){
                    String id_str = res_set.getString("id");
                    String username = res_set.getString("username");
                    String password = res_set.getString("password");
                    String newline = id_str+","+username+","+password+"
    ";
                    System.out.println(newline);
                    FileUtils.write(file, newline, "utf8", true);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                // 关闭数据库连接 
                conn.close();
            }

    二、数据库连接池(c3po)

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

    相比较原始的连接方式,数据库连接池技术具有节约资源、用户访问高效的优势。常见的连接池技术有c3po、Druid,本文描述的是c3po的实现过程。

    以maven项目为例

    1. 在pom文件中添加对应依赖

    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>

    2、定义配置文件

    名称及路径 : src/main/resources/c3p0-config.xml 

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    <!-- 默认配置,只可以出现一次 -->
    <!--根据name获取对应配置的配置<named-config name="mysql"> -->
        <default-config>
            <!-- 配置JDBC 四个基本属性 -->
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC</property>
            <property name="user">root</property>
            <property name="password">123456</property>
            <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
            <property name="acquireIncrement">3</property>
            <!-- 初始化数据库连接池时连接的数量 -->
            <property name="initialPoolSize">5</property>
            <!-- 数据库连接池中的最小的数据库连接数 -->
            <property name="minPoolSize">2</property>
            <!-- 数据库连接池中的最大的数据库连接数 -->
            <property name="maxPoolSize">10</property>
        </default-config>
    </c3p0-config>

    3、创建数据库连接池对象ComboPooledDataSource以及获取数据库连接getConnection

    // 获得c3p0连接池对象
    private static ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
    
    // 获得数据库连接对象
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    
    // 获得c3p0连接池对象
    public static DataSource getDataSource() {
        return ds;
    }

    数据库连接池工具只管理数据库连接对象,不会影响后续的操作,后续操作的简化可以借助数据库操作工具类来实现,比如commons-dbutils。

    三、数据库操作工具类(commons-dbutils)

    commons-dbutils是一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。

    添加pom文件依赖

    <dependency>
        <groupId>commons-dbutils</groupId>
        <artifactId>commons-dbutils</artifactId>
        <version>1.7</version>
    </dependency>

    基本操作

    // commons-dbutils核心api,构造时候需要传入数据库连接对象(可以为上文中连接池中获取的连接对象)
    QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
    
    // 定义sql
    String sql = "select * from user_test";
    
    // 执行sql,返回DbUser类构成的列表对象(注意这里需要定义与数据库一模一样的数据库model类,才可以将查询结果一一对应)
    List list = (List)runner.query(sql, new BeanListHandler(DbUser.class));
    DbUser对象
    package com.lxs.db2excel;
    
    public class DbUser2 {
        
        private String uid;
        
        private String username;
        
        private String password;
        
        public String getUid() {
            return uid;
        }
        public void setUid(String uid) {
            this.uid = uid;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "DbUser [uid=" + uid + ", username=" + username + ", password=" + password + "]";
        } 
    }
  • 相关阅读:
    MongoDB Java连接---MongoDB基础用法(四)
    MongoDB用户,角色管理 --- MongoDB基础用法(三)
    Mongodb命令 --- MongoDB基础用法(二)
    MongoDB简介---MongoDB基础用法(一)
    Docker 私有仓库
    Dockerfile
    Docker部署Mysql, Tomcat, Nginx, Redis
    Docker 容器的数据卷
    封装的多功能多效果的RecyclerView
    安卓实现沉浸式效果,状态栏变色
  • 原文地址:https://www.cnblogs.com/leixs/p/15361942.html
Copyright © 2011-2022 走看看