JDBC从连接池获取连接

DBCP介绍

DBCP是Java开源连接池中最常用的一种,它一般应用在数据库使用非常频繁的系统中,可以处理数据库连接的大量请求,是做大型站点的首选数据库配置。

简单配置

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=123456
maxActive=50
maxIdle=20
maxWait=60000

添加maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.1.1</version>
</dependency>

代码展示

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

public class DBUtil {
    private static DataSource ds;
    private static Connection conn;
    static {
        try {
            Properties properties = new Properties();
            InputStream inStream = DBUtil.class.getResourceAsStream("/dataSouce.properties");
            properties.load(inStream);
            ds = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 创建数据库连接对象
    public static Connection getConn() throws SQLException {
        if (conn == null || conn.isClosed()) {
            conn = ds.getConnection();
        }
        return conn;
    }

    // 闭关数据库连接
    public static void closeConn() {
        try {
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conn = null;
        }
    }
}

操作数据库

import java.sql.Connection;
import java.sql.Statement;

public class Test {

    public static void main(String[] args) throws Exception {

        Connection conn = DBUtil.getConn();
        // 开启事务
        conn.setAutoCommit(false);
        Statement stmt = conn.createStatement();
        int rs = stmt.executeUpdate("DELETE FROM user WHERE name='qiang'");
        if (rs > 0) {
            System.out.println("更新成功!");
            // 回滚
            conn.rollback();
        } else {
            System.out.println("更新失败!");
            // 提交
            conn.commit();
        }
    }
}

原文地址:https://www.cnblogs.com/feiqiangsheng/p/11406470.html

时间: 2024-11-05 12:25:15

JDBC从连接池获取连接的相关文章

JSP(Servlet)中从连接池获取连接

1) 建立连接. 2) 执行SQL. 3) 处理结果. 4) 释放资源. Connection pool:连接池 DataSource: LDAP ( Light directory access protocal )轻量级目录访问协议. JNDI ( java naming director interface ) Java 命名目录接口. 使用连接池: 1)配置连接池: 改配置文件 conf/context.xml <Resource driverClassName="oracle.j

dbcp2连接池获取数据库连接Connection

一.先来看看手工创建的方式 public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/mytable?useUnicode=true&characterEncoding=ut

tomcat JDBC连接池c3p0连接资源耗尽导致tomcat实例对应的app移动端无法访问。

tomcat app手机端程序无法打开了. 直接查看tomcat日志: [[email protected] logs]$ tail catalina.out          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(Task

数据源,连接池,连接,jndi

连接池:连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象.连接池自动分配连接对象并对闲置的连接进行回收.连接池中的连接对象是由数据源(DataSource)创建的.连接池(Connection Pool)用来管理连接(Connection)对象. 数据源:数据源(DataSource)用来连接数据库,创建连接(Connection)对象. java.sql.DataSource接口负责建立与数据库的连接 由Tomcat提供,将连接保存在连接池中. JNDI(Java Naming

HttpClient连接池的连接保持、超时和失效机制

HTTP是一种无连接的事务协议,底层使用的还是TCP,连接池复用的就是TCP连接,目的就是在一个TCP连接上进行多次的HTTP请求从而提高性能.每次HTTP请求结束的时候,HttpClient会判断连接是否可以保持,如果可以则交给连接管理器进行管理以备下次重用,否则直接关闭连接.这里涉及到三个问题: 1.如何判断连接是否可以保持? 要想保持连接,首先客户端需要告诉服务器希望保持长连接,这就是所谓的Keep-Alive模式(又称持久连接,连接重用),HTTP1.0中默认是关闭的,需要在HTTP头加

网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2次. >强烈依赖数据库的驱动jar 解决办法: Class.forName("com.mysql.jdbc.Driver"); 1.1.2 API详解:java.sql.Statement接口: 操作sql语句,并返回相应结果 String sql = "某SQL语句&qu

使用DBCP连接池对连接进行管理

//需要引用的jar包有4个,分别是commons-pool2-2.4.2.jar.commons-dbcp2-2.1.1.jar.mysql-connector-java-5.1.42-bin.jar.commons-logging-1.2.jar //缺少一个都会报错(Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory)意思是找

C3P0连接池拒绝连接

当出现c3p0 连接池显示以下错误: 1.检查你c3p0设置允许的最大连接数2.查看当前Oracle允许的最大连接数3.以上没问题,确认长链接的策略 [INFO] [c3p0] The following Exceptions occurred while trying to clean up a Connection's stranded resources: <com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnec

数据库会自动清除掉超时的空闲连接造成中间件连接池中连接断开的问题

所有的数据库都会自动清除掉超时的空闲连接,因为数据库本身是一个SOCKET服务器,它必须要定时清除掉僵死连接,来保持其长时间稳定运行. 数据库清除空闲连接以后,中间件连接池里面con.connected还是等于true,也就是说在中间件里面是无法判断连接池中的连接是否已经被数据库给清除了. 事实上中间件连接池中的所有连接必须保持24小时的连接是通的.那么如何解决这个矛盾呢? 答案是在连接池中设置定时器,定时检查池中的每一个连接,当池中的空闲连接已经超过了半小时,就自动将此连接断开并重连. {**