900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java使用数据库连接池连接MySQL/MariaDB--DBCP2

java使用数据库连接池连接MySQL/MariaDB--DBCP2

时间:2019-08-06 01:37:32

相关推荐

java使用数据库连接池连接MySQL/MariaDB--DBCP2

如果每次操作数据库都需要重新连接数据库,那么会很浪费资源。因此建议使用数据库的连接池来满足多线程的数据库操作。

Java中数据库连接池有多种实现方法,推荐使用DBCP,这是Apache 提供的数据库连接池的实现。

在Maven中添加如下依赖:

<dependency><groupId>mons</groupId><artifactId>commons-dbcp2</artifactId><version>2.6.0</version></dependency>

注意:2.6.0版本是最新的版本,不支持低于Java8的版本,更多内容参考官方文档:DBCP – Overview

官方样例:

/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License. You may obtain a copy of the License at**/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import javax.sql.DataSource;import java.sql.Connection;import java.sql.Statement;import java.sql.ResultSet;import java.sql.SQLException;//// Here are the dbcp-specific classes.// Note that they are only used in the setupDataSource// method. In normal use, your classes interact// only with the standard JDBC API//import mons.pool2.ObjectPool;import mons.pool2.impl.GenericObjectPool;import mons.dbcp2.ConnectionFactory;import mons.dbcp2.PoolableConnection;import mons.dbcp2.PoolingDataSource;import mons.dbcp2.PoolableConnectionFactory;import mons.dbcp2.DriverManagerConnectionFactory;//// Here's a simple example of how to use the PoolingDataSource.////// Note that this example is very similar to the PoolingDriver// example. In fact, you could use the same pool in both a// PoolingDriver and a PoolingDataSource////// To compile this example, you'll want:// * commons-pool2-2.3.jar// * commons-dbcp2-2.1.jar// in your classpath.//// To run this example, you'll want:// * commons-pool2-2.3.jar// * commons-dbcp2-2.1.jar// * commons-logging-1.2.jar// * the classes for your (underlying) JDBC driver// in your classpath.//// Invoke the class using two arguments:// * the connect string for your underlying JDBC driver// * the query you'd like to execute// You'll also want to ensure your underlying JDBC driver// is registered. You can use the "jdbc.drivers"// property to do this.//// For example:// java -Djdbc.drivers=org.h2.Driver \// -classpath commons-pool2-2.3.jar:commons-dbcp2-2.1.jar:commons-logging-1.2.jar:h2-1.3.152.jar:. \// PoolingDataSourceExample \// "jdbc:h2:~/test" \// "SELECT 1"//public class PoolingDataSourceExample {public static void main(String[] args) {//// First we load the underlying JDBC driver.// You need this if you don't use the jdbc.drivers// system property.//System.out.println("Loading underlying JDBC driver.");try {Class.forName("org.h2.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}System.out.println("Done.");//// Then, we set up the PoolingDataSource.// Normally this would be handled auto-magically by// an external configuration, but in this example we'll// do it manually.//System.out.println("Setting up data source.");DataSource dataSource = setupDataSource(args[0]);System.out.println("Done.");//// Now, we can use JDBC DataSource as we normally would.//Connection conn = null;Statement stmt = null;ResultSet rset = null;try {System.out.println("Creating connection.");conn = dataSource.getConnection();System.out.println("Creating statement.");stmt = conn.createStatement();System.out.println("Executing statement.");rset = stmt.executeQuery(args[1]);System.out.println("Results:");int numcols = rset.getMetaData().getColumnCount();while(rset.next()) {for(int i=1;i<=numcols;i++) {System.out.print("\t" + rset.getString(i));}System.out.println("");}} catch(SQLException e) {e.printStackTrace();} finally {try {if (rset != null) rset.close(); } catch(Exception e) {}try {if (stmt != null) stmt.close(); } catch(Exception e) {}try {if (conn != null) conn.close(); } catch(Exception e) {}}}public static DataSource setupDataSource(String connectURI) {//// First, we'll create a ConnectionFactory that the// pool will use to create Connections.// We'll use the DriverManagerConnectionFactory,// using the connect string passed in the command line// arguments.//ConnectionFactory connectionFactory =new DriverManagerConnectionFactory(connectURI,null);//// Next we'll create the PoolableConnectionFactory, which wraps// the "real" Connections created by the ConnectionFactory with// the classes that implement the pooling functionality.//PoolableConnectionFactory poolableConnectionFactory =new PoolableConnectionFactory(connectionFactory, null);//// Now we'll need a ObjectPool that serves as the// actual pool of connections.//// We'll use a GenericObjectPool instance, although// any ObjectPool implementation will suffice.//ObjectPool<PoolableConnection> connectionPool =new GenericObjectPool<>(poolableConnectionFactory);// Set the factory's pool property to the owning poolpoolableConnectionFactory.setPool(connectionPool);//// Finally, we create the PoolingDriver itself,// passing in the object pool we created.//PoolingDataSource<PoolableConnection> dataSource =new PoolingDataSource<>(connectionPool);return dataSource;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。