首先使用DBUtils与c3p0池需要导入的jar包
MYSQL: mysql-connector-java-5.1.46-bin.jar
DBUtils:commons-dbutils-1.6.jar
c3p0: c3p0-0.9.2-pre1.jar , mchange-commons-0.2.jar
附上文件下载:链接:https://pan.baidu.com/s/18t-nqudP2qKXEI1rHFcMEQ 密码:pzz3
JDBCUtils工具类:
//创建连接池的对象
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//通过静态方法获取连接池对象
public static DataSource getDataSource() {
return ds;
}
}
c3p0池所使用的xml配置文件:
c3p0-config.xml (放在src下,会实现自动加载)配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///mydatabase?useUnicode=true&characterEncoding=UTF-8</property>
<!-- 关于此处的这段:
?useUnicode=true&characterEncoding=UTF-8
是在我使用c3p0池提供的方式插入数据时在mysql中出现中文乱码问题,感谢一些资源分享者-->
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
</c3p0-config>
建表语句:
|dbu_test | CREATE TABLE `dbu_test` (
`name` varchar(20) DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL,
`money` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
测试类(增删改):
// @Test
public void test1(){
//第一步:创建queryRunner对象,用来操作sql语句
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
//第二步:创建sql语句
String sql = "insert into dbu_test values(?,?,?)";
//第三步:执行sql语句,params:是sql语句的参数
//注意,给sql语句设置参数的时候,按照user表中字段的顺序
try {
Object[] params = {"crudby","male",2000};
int line = qr.update(sql, params);
System.out.println(line);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void test2(){
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
// String sql="update dbu_test set money=3000 where name=?";
//开始插入中文时出现数据库查看乱码问题就使用了上面的sql语句测试
String sql="update dbu_test set name='小花',sex='女' where money=1230 ";
try{
// Object[] params ={"crudby"}; int line=qr.update(sql,params);
int line=qr.update(sql);System.out.println("line="+line);
}catch(SQLException e){
System.out.println("更新失败..");
e.printStackTrace();
}
}
// @Test
public void test3(){
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
String sql="delete from dbu_test where name=?";
try{
// Object[] params ={"小花"};
//查看QueryRunner的类的方法可以发现可以直接接收String
int line=qr.update(sql,"小花");
System.out.println("line="+line);
}catch(SQLException e){
System.out.println("删除失败..");
e.printStackTrace();
}
}
ResultSetHandler接口的实现类来进行查询结果的封装:
接口实现类MyResult:
public class MyResult implements ResultSetHandler<List<User>>{
@Override
public List<User> handle(ResultSet rs) throws SQLException {
List<User> list = new ArrayList<User>();
while(rs.next()){
User user=new User();
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex"));
user.setMoney(rs.getFloat("money"));
list.add(user);
}
return list;
}
}
测试类:
public void test4(){
/*
* 通过MyResult实现ResultSetHandler<T>的接口来作为查询结果的容器
*/
QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
List<User> list =qr.query(sql, new MyResult());
System.out.println(list);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}
}
//User类就没有贴上,基本属性的get,set方法及重写的toString方法
DBUtils提供的实现类常用的三个BeanHandler、BeanListHandler和ScalarHandler,下列分别进行测试
// @Test
public void test5(){
/*
* BenamHandler<T>是接口ResultSetHandler<T>的实现类
* 将单个查询数据结果返回
*/
QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
User user =qr.query(sql, new BeanHandler<User>(User.class));
System.out.println(user);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}
}
// @Test
public void test6(){
/*
* 同上,获取的结果封装成一个list集合
* 与自己写的MyResult实现类功能类似
*/
QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
List<User> list=qr.query(sql, new BeanListHandler<User>(User.class));
System.out.println(list);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}
}
@Test
public void test7(){
/*
* ScalarHandler:封装类似count、avg、max、min、sum。。。。函数的执行结果
*/
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
String sql = "select count(*) from dbu_test";
try {
Object object = qr.query(sql, new ScalarHandler());
System.out.println(object);
} catch (SQLException e) {
System.out.println("查询失败..");
e.printStackTrace();
}
}
自学写的总结,期间遇到很多很多的问题,感谢网上一些资源的分享者,如有错误,敬请指正,感激不尽!