java JDBC (八) 连接池

package cn.sasa.demo1;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;

public class DBUtils {
    private static BasicDataSource datasource = new BasicDataSource();

    static {
        /**
         * 连接池:
         * 存放连接的容器
         * 不需要每次都创建连接、释放连接
         *
         * DataSource接口
         * java为数据库连接池提供的公共接口:javax.sql.DataSource
         * 常用的连接池: DBCP C3P0
         *
         * 导入jar包
         * DBCP连接池:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
         * Commons Pool:http://commons.apache.org/proper/commons-pool/download_pool.cgi
         * DBCP依赖于Pool
         * 只导入上面两个包运行如下代码会报错:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
         * 还需导入包commons-logging:http://commons.apache.org/proper/commons-logging/download_logging.cgi
         */
        //数据库连接信息,必须
        datasource.setDriverClassName(DBProperties.driver);
        datasource.setUrl(DBProperties.url);
        datasource.setUsername(DBProperties.user);
        datasource.setPassword(DBProperties.pwd);
        //连接池的配置,可选信息
        datasource.setInitialSize(10);//初始化的连接数
        //....
    }

    public static DataSource getDataSource() {
        return datasource;
    }
}
package cn.sasa.demo1;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class ConnectionPoolDemo {
    static QueryRunner query = new QueryRunner(DBUtils.getDataSource());
    public static void main(String[] args) {
        select();
    }
    static void select() {
        String sql = "SELECT * FROM product";
        try {
            List<Product> plist = query.query(sql, new BeanListHandler<Product>(Product.class));
            for(Product product : plist) {
                System.out.print(product.getPname()+"="+product.getPrice()+"\t");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package cn.sasa.demo1;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class DBProperties {
    public static String driver = "";
    public static String url = "";
    public static String user = "";
    public static String pwd = "";

    static {
        try {
            InputStream input = DBProperties.class.getClassLoader().getResourceAsStream("database.properties");
            Properties properties = new Properties();
            properties.load(input);
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            pwd = properties.getProperty("pwd");
        }catch(IOException ex){
//            ex.printStackTrace();
            throw new RuntimeException("数据库信息获取失败");
        }
    }
}
package cn.sasa.demo1;

public class Product {
    private int pid;
    private String pname;
    private double price;
    private String ptype;
    private String create_tm;

    public Product() {}
    public Product(int pid, String pname,double price,
            String ptype, String create_tm) {
        this.pid = pid;
        this.pname = pname;
        this.price = price;
        this.ptype = ptype;
        this.create_tm = create_tm;
    }
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getPtype() {
        return ptype;
    }
    public void setPtype(String ptype) {
        this.ptype = ptype;
    }
    public String getCreate_tm() {
        return create_tm;
    }
    public void setCreate_tm(String create_tm) {
        this.create_tm = create_tm;
    }
}

原文地址:https://www.cnblogs.com/SasaL/p/10287438.html

时间: 2024-10-09 05:08:31

java JDBC (八) 连接池的相关文章

JDBC之 连接池

JDBC之 连接池 有这样的一种现象: 用java代码操作数据库,需要数据库连接对象,一个用户至少要用到一个连接.现在假设有成千上百万个用户,就要创建十分巨大数量的连接对象,这会使数据库承受极大的压力,为了解决这种现象,一种技术出现了,这就是数据库连接池. 什么是数据库连接池(原理) 所谓数据库连接池,可以看作 :在用户和数据库之间创建一个”池”,这个池中有若干个连接对象,当用户想要连接数据库,就要先从连接池中获取连接对象,然后操作数据库.一旦连接池中的连接对象被拿光了,下一个想要操作数据库的用

day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)

day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbutils ? 事务 ? 事务的四大特性:ACID: mysql中操作事务 jdbc中操作事务 ? ? ? 事务概述 为了方便演示事务,我们需要创建一个account表: CREATE TABLE account( ????id INT PRIMARY KEY AUTO_INCREMENT, ????NA

集合、多线程、网络编程、JDBC、连接池、反射、综合应用

1.使用TCP连接服务器和客户端. 2.结合反射的知识.创建JDBC和连接池. 3.客户端输入信息并保存到一个对象中,发送到服务器. 4.服务器接收对象,通过JDBC存储进数据库中. 5.把服务器放到线程中,保持启动状态. 6.客户端读取数据库的数据信息,放到集合中. 7.遍历集合,输出数据库的数据. 服务器和客户端的项目结构: 服务器 客户端 实体类: package com.luo.project.pojo; import java.io.Serializable; public class

Java web----Tomcat配置连接池

1 Tomcat配置JNDI资源 JNDI(Java Naming and Directory Interface),Java命名和目录接口.JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源. 我们这里要配置的资源当然是连接池了,这样项目中就可以通过统一的方式来获取连接池对象了. 配置JNDI资源需要到<Context>元素中配置<Resource>子元素: name:指定资源的名称,这个名称可以随便给,在获取资源时需要这个名称: factory:用来创建

java配置dbcp连接池,经过反复测试

<span style="font-size:18px;"><strong>Java代码</strong></span> package cn.songxinqiang.samples.commonsdbcp.util; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.P

JDBC自定义连接池

最近学习了JDBC的相关知识,写一下自定义连接池 一些说明: 本代码参考了部分别人的代码!!! JDBCCon类具体创建了连接: MyConnection类集成了Connection类用来管理连接与池,其中的close方法必须pool.add(): MyDataSource则是具体实现连接池. 具体步骤: 1.导mysql的jar包 2.配置db.propertites 1 driver = com.mysql.cj.jdbc.Driver 2 url = jdbc:mysql://localh

jdbc之连接池

第三方数据库连接池DBCP的应用 连接池的原理 1.缓存Connection对象 2.缓存Statement及PreparedStatement package jdbcdemo2; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.u

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>

Java -- JDBC 学习--数据库连接池

JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开发,存在的问题: 普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s-1s的时间).需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接.这样的方式将会消耗大量的资源和