JDBC_Utils框架以及连接池的使用

说明:小白入门,有任何问题欢迎指出交流

JDBC框架以及连接池的使用方式简述

1、C3P0连接池

文档链接:https://www.mchange.com/projects/c3p0/

首先引入相应jar包:c3p0-0.9.1.2.jar。外部引入的jar包一般存放在项目文件夹中的lib文件夹中,然后通过eclipse的buildpath引入到当前项目中(环境变量中)

然后编写相应配置文件,配置文件编写方式可以参考C3P0官网的文档说明

XML配置文件编写方式参考如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///web_07</property>
    <property name="user">root</property>
    <property name="password">123</property>
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">20</property>
  </default-config>
 
  <named-config name="oracle">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///web_07</property>
    <property name="user">root</property>
    <property name="password">123</property>
  </named-config>
 

</c3p0-config>

文件中的<named-config name="oracle">和<default-config>的区别在于创建ComboPooledDataSource时是否传递String configName参数,如果不传递参数则使用<default-config>标签中的配置,如果传递configName参数的话,则采用相应配置名称的配置

最后通过编写C3P0连接池的工具类,方便以后通过C3P0连接池来获取和归还相应的Connection对象,参考代码如下:

public class C3P0_Utils {
    //加载xml中的配置
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
    
    //获取dataSource对象
    public static DataSource getComboPooledDataSource() {
        return dataSource;
    }
    
    //获取链接
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

 

2、DBCP连接池

导入jar包:commons-dbcp-1.4.jar 和 commons-pool-1.5.6.jar

编写properties配置文件信息,可以参考官方的文档说明,格式如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///web08?useUnicode=true&characterEncoding=utf8&useSSL=true
user=root
password=420054

 

编写工具类:

public class DBCP_Utils {
    private static DataSource dataSource;

    static {

        try {
            /*
             * 获取连接池的方法:
             * 通过使用类加载器和配置文件流来获取配置文件信息
             * 最后通过DBCP的工厂方法创建连接池对象
             * */
            InputStream is = DBCP_Utils.class.getClassLoader().getResourceAsStream("db2.properties");
            Properties props = new Properties();
            props.load(is);
            dataSource = BasicDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
    public static DataSource getDataSource() {
        return dataSource;
    }
}

 

 

 

3、DBUtils工具类使用方法:

引入jar包:commons-dbutils-1.4.jar

代码使用参考如下:

首先创建QueryRunner对象,使用C3P0获取链接池传递给QueryRunner

然后编写相应sql语句,通过QueryRunner对象来执行query 和 update方法,使用query方法需要创建Handler对象,最后查询到的结果会存放在Handler对象中。

结果为多行一般使用带有List字样的Handler.

BeanListHandler         MapListHandler       ColumnListHandler

结果为单行则不用带List的Handler

BeanHandler              MapHandler              ScalarHandler       

package jdbc.test;

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


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import jdbc.domain.User;
import jdbc.utils.C3P0_Utils;

public class TestDBUtils {
	
	/**
	 * 查询所有用户的方法
	 */
	@Test
	public void testQueryAll3() {
		
		try {
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			String sql = "select * from tbl_user";
			List<User>list = qr.query(sql, new BeanListHandler<User>(User.class));
			for (User user : list) {
				System.out.println(user.getUname()+" : "+user.getUpassword());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 根据id查询用户
	 */
	@Test
	public void testQueryUserById() {
		
		try {
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			String sql = "select * from tbl_user where uid=?";
			Object[] params = {17};
			User user = qr.query(sql, new BeanHandler<User>(User.class), params);
			System.out.println(user.getUname()+" : "+user.getUpassword());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 查询所有用户的个数
	 */
	@Test
	public void testQueryCount() {
		
		try {
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			String sql = "select count(*) from tbl_user";
			Long count = (Long)qr.query(sql, new ScalarHandler());
			System.out.println(count);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 查询所有用户的方法2
	 */
	@Test
	public void testQueryAll2() {
		try {
			// 创建核心类QueryRunner()
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			// 编写sql语句
			String sql = "select * from tbl_user";
			// 执行sql语句
			List<Map<String, Object>>list =  qr.query(sql, new MapListHandler());
			for (Map<String, Object> map : list) {
				System.out.println(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 查询所有用户的方法
	 */
	@Test
	public void testQueryAll() {

		try {
			// 创建核心对象QueryRunner对象
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			// 编写sql语句
			String sql = "select * from tbl_user";
			// 因为没有参数需要设置,故直接执行sql语句,又因为是查询语句,故用query方法
			List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
			for (Object object : list) {
				System.out.println(object);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 根据id更新数据
	 */
	@Test
	public void testUpdateUsersById() {

		try {
			// 创建核心类
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			// 编写sql语句
			String sql = "update tbl_user set password=? where id=?";
			Object[] params = { "xxxxx", 2 };
			int rows = qr.update(sql, params);
			if (rows > 0) {
				System.out.println("更新成功");
			} else {
				System.out.println("更新失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 根据用户id插入数据功能
	 */
	@Test
	public void testAddUserById() {

		try {
			// 创建核心类
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			// 编写sql语句
			String sql = "insert into tbl_user values(null,?,?)";
			// 设置参数
			Object[] params = { "余淮", "耿耿" };
			int rows = qr.update(sql, params);
			if (rows > 0) {
				System.out.println("添加成功");
			} else {
				System.out.println("添加失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据用户id删除用户功能
	 */
	@Test
	public void testDeleteById() {

		try {
			// 创建核心类
			QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
			// 编写sql语句
			String sql = "delete from tbl_user where uid=?";
			// 设置参数
			Object param = 8;
			// 运行sql语句
			int rows = qr.update(sql, param);
			if (rows > 0) {
				System.out.println("删除成功");
			} else {
				System.out.println("删除失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

 

                                                                              

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值