java -数据库连接池-c3p0/druid

最后都变了- 提交于 2020-02-03 11:53:41

CP30笔记
连接池 javax.sql.Datasource数据库连接池
具体是实现由厂商提供,跟JDBC一样,必须导入jar包,这样以后就不用每次都有DriverManager创建连接了,而且这个连接池是针对这个数据库而定义的一个工厂,也就是必须初始化,注册驱动,添加路径,url用户名等等,可以理解为一口气多创几个连接。
这里我们使用的是C3P0-v0.9.5.2来开始学习这个数据库连接池实现技术,相同的步骤,先导入jar包。

Configuration files are normally looked up under standard names (c3p0.properties or c3p0-config.xml) at the top level of an application’s classpath, but the XML configuration can be placed anywhere in an application’s file system or classpath, if the system property com.mchange.v2.c3p0.cfg.xml is set.

上面的配置文件介绍了存放的位置(默认)与文件,即src文件下即可。
ComboPooledDataSource()新对象实例后不用注册驱动也不用传url等去获取连接对象,因为这些都由这个Cp DataSource的对象创建时,根据配置文件而创建好,如下,真的是相当便捷。

 	<!--  连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/db4</property>
    <property name="user">root</property>
    <property name="password">root</property>
    

注意连接池配好了,千万别忘记最要紧的mysql-connection的包。

   DataSource ds = new ComboPooledDataSource();
        Connection conn = ds.getConnection();
        System.out.println(conn);

Druid的基本使用
首先要导包,然后也是不用进行驱动注册和url设置,直接写在pro文件里面,意味着必须通过classloader获取然后获取路径。
唯一不同的是druid是用工厂类,即使用静态方法创建一个DataSource的数据库池对象ds,之后再获取连接即可。

public class Driod {
    public static void main(String[] args) throws Exception {
        //定义配置文件
        Properties pro = new Properties();
        InputStream is = Driod.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        Connection connection = ds.getConnection();
        System.out.println(connection);
    }

DruidJDBC utils的编写
一定要注意这个编写的utils的分工,把加载pro写在静态代码块,获取连接写为方法,不要忘了有获取一个新的数据池的要求,所以要多写一个方法。那么仅仅调用一个连接,这个连接池就是使用默认的连接池吗?这部分冲突如何定义,让我来实践一下先0.0.

其实使用这个类下的成员变量即可,定义一个就行:
工具类

/**
 * Druid连接池工具类,池最终还是为了连接,故JDBCutils,别起错名
 */
public class JDBCutils {
        private static DataSource ds;

        static {
            Properties properties = new Properties();
            try {
                properties.load(JDBCutils.class.getClassLoader().getResourceAsStream("druid.properties"));
                ds = DruidDataSourceFactory.createDataSource(properties);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public static DataSource getDataSource(){
            return ds;
        }
        public static Connection getConnection() throws SQLException {
            return ds.getConnection();
        }
        public static void close(ResultSet resultSet, Statement stmt,Connection connection){
            if(resultSet != null)
            {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }if(stmt != null)
            {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }if(connection != null)
            {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
}

Demo演示 数据库池工具类

public class DruidDemoutils {
    public static void main(String[] args) {
        /**
         * 添加记录
         */
        PreparedStatement preparedStatement = null;
        Connection connection = null;
        try {
            connection = JDBCutils.getConnection();
            String sql = "insert into user values(null,?,?)";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, "sss");
            preparedStatement.setString(2, "12313");
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCutils.close(null, preparedStatement, connection);
        }

    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!