Eclipse中C3p0数据库连接池配置教程和MySQL查询实例(20200807)

Eclipse中C3p0数据库连接池配置教程和MySQL查询实例

一、查看MySQL安装版本并准备所依赖的jar包

MySQL安装版本(社区版) : 8.0.20

在这里插入图片描述
在这里插入图片描述

所需要的三个jar包:

 c3p0-0.9.5.2.jar、mchange-commons-java-0.2.20.jar和mysql-connector-java-8.0.20.jar

在这里插入图片描述

二、新建C3p0-config.xml配置文件

       代码内容如下图所示(主要以命名配置为例(MySQLdb)进行测试连接MySQL数据库):
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">
			jdbc:mysql://localhost:3306/infomationsystem?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=FALSE&amp;serverTimezone=UTC
		</property>
		<property name="user">root</property>
		<property name="password">123456</property>
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">20</property>
	</default-config> 
	<!--named-config的name属性值用于传递构造方法中去 -->
	<named-config name="MySQLdb">
		<property name="user">root</property>
		<property name="password">123456</property>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">
			jdbc:mysql://localhost:3306/infomationsystem?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=FALSE&amp;serverTimezone=UTC
		</property>
   		<property name="acquireIncrement">5</property>
   		<property name="initialPoolSize">10</property>
   		<property name="minPoolSize">5</property>
   		<property name="maxPoolSize">20</property>
	</named-config>
</c3p0-config>

三、新建DataSourceUtil类(.java)进行数据库连接池的测试

package com.test.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils 
{
    
    
	private static DataSource dataSource = new ComboPooledDataSource("MySQLdb");
	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
	// 直接可以获取一个连接池
	public static DataSource getDataSource()
	 {
    
    
		return dataSource;
	}
	// 获取连接对象
	public static Connection getConnection() throws SQLException 
	{
    
    
		Connection con = tl.get();
		if (con == null) 
		{
    
    
			con = dataSource.getConnection();
			tl.set(con);
		}
		return con;
	}
	// 开启事务
	public static void startTransaction() throws SQLException 
	{
    
    
		Connection con = getConnection();
		if (con != null) {
    
    
			con.setAutoCommit(false);
		}
	}
	// 事务回滚
	public static void rollback() throws SQLException 
	{
    
    
		Connection con = getConnection();
		if (con != null) 
		{
    
    
			con.rollback();
		}
	}
	// 提交并且 关闭资源及从ThreadLocall中释放
	public static void commitAndRelease() throws SQLException 
	{
    
    
		Connection con = getConnection();
		if (con != null) 
		{
    
    
			con.commit(); // 事务提交
			con.close();// 关闭资源
			tl.remove();// 从线程绑定中移除
		}
	}
	// 关闭资源方法
	public static void closeConnection() throws SQLException 
	{
    
    
		Connection con = getConnection();
		if (con != null) {
    
    
			con.close();
		}
	}
	public static void closeStatement(Statement st) throws SQLException 
	{
    
    
		if (st != null) 
		{
    
    
			st.close();
		}
	}
	public static void closeResultSet(ResultSet rs) throws SQLException 
	{
    
    
		if (rs != null) {
    
    
			rs.close();
		}
	}
	public static void main(String[] args) 
	{
    
    
		try 
		{
    
    
			System.out.println(getConnection().toString());
		} catch (SQLException e) 
		{
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

DataSourceUtil.java运行结果

在这里插入图片描述
注:Java控制台如果出现这些类似代码(com.mchange.v2.c3p0.impl.NewProxyConnection@9660f4e [wrapping: com.mysql.jdbc.JDBC4Connection@5a8806ef])并且没有运行报错,那么C3P0数据库连接MySQL就配置成功了。

四、具体调用实例

    为了更好地利用SQL语句来查询MySQL数据库中表中的内容;
    下面以dic类为例,介绍如何利用DataSourceUtil类和DicDao类来进行基于C3p0连接池的MySQL数据库查询;
    (用到QueryRunner),需要包含commons-dbutils-1.4.jar这个jar包。

第一步,新建Dic类

package com.test.lei;

public class Dic 
{
    
    
	private int ID;
	private String CATEGORY;
	private String CNNAME;
	private String ENNAME;
	public int getID() 
	{
    
    
		return ID;
	}
	public void setID(int iD) 
	{
    
    
		ID = iD;
	}
	public String getCATEGORY() 
	{
    
    
		return CATEGORY;
	}
	public void setCATEGORY(String cATEGORY) 
	{
    
    
		CATEGORY = cATEGORY;
	}
	public String getCNNAME() 
	{
    
    
		return CNNAME;
	}
	public void setCNNAME(String cNNAME) 
	{
    
    
		CNNAME = cNNAME;
	}
	public String getENNAME() 
	{
    
    
		return ENNAME;
	}
	public void setENNAME(String eNNAME) 
	{
    
    
		ENNAME = eNNAME;
	}
	@Override
	public String toString() 
	{
    
    
		return "Dic [ID=" + ID + ", CATEGORY=" + CATEGORY + ", CNNAME=" + CNNAME + ", ENNAME=" + ENNAME + "]";
	}
}

第二步,根据Dic类新建MySQL数据表如下:

在这里插入图片描述

第三步,新建DicDao类来执行查询

/*  */
package com.test.dao;

import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.test.lei.Dic;
import com.test.utils.DataSourceUtils;

public class DicDao 
{
    
    
	public List<Dic> findDicList() throws SQLException 
	{
    
    
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from MyDic";
		List<Dic> dicList = runner.query(sql,new BeanListHandler<Dic>(Dic.class));
		return dicList;
	}
	public static void main(String[] args) throws SQLException
	{
    
    
		DicDao d = new DicDao();
		for(int i = 0;i<d.findDicList().size();i++)
		System.out.println(d.findDicList().get(i));
	}
}

第四步,查看执行查询后得到的结果

在这里插入图片描述
至此,可见查询结果和我们新建的MySQL数据库表中的内容是一致的,方法有效哦!

猜你喜欢

转载自blog.csdn.net/jing_zhong/article/details/107867013