DBUtils工具类

1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装。
   做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中
做了增删改的封装,编写代码比较少 2.需要导入开发的jar包
commons-dbutils-1.4.jar


3.常见的
QueryRunner
  1.QueryRunner类可以来完成增删改查所有的功能

  2.常用的方法    

     QueryRunner()                                                 -- 构造方法,没有任何参数,说明他不管理连接的。
     QueryRunner(DataSource ds)                                    -- 构造方法,传入连接池,说明他已经管理连接(从连接池中获取连接,归还连接)

     int update(String sql, Object... params)                      -- 连接已经管理了
int update(Connection conn, String sql, Object... params) -- 说明连接没有管理 <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) int [] batch(String sql, Object[][] params) -- 批处理的方法(批量执行一些SQL语句)new Object[][]{{xx},{yy}}

4.常见的ResultSetHandler接口  
  1.ResultSetHandler接口,提供了一个方法,让用户自己来封装结果集。
  2.接口中提供了9个实现类,封装结果集的类型都是不同的
   BeanHandler -- 把一条记录封装到一个JavaBean的对象中。
  BeanListHandler -- 把一条记录封装到一个JavaBean对象中,再把这些JavaBean封装到一个List集合中。List<JavaBean>   ArrayHandler -- 把一条记录封装到一个数组中
  ArrayListHandler -- 把一条记录封装到一个数组中,把这些数组封装到List集合中    MapHandler -- 把一条记录封装到Map集合中
   MapListHandler -- 把一条记录封装到Map集合中,这些map封装到List集合中    ColumnListHandler -- 查询的是某列的数据(select username from t_account),把该列封装到List集合中    KeyedHandler -- 把一条记录封装到Map集合中,再把这些map封装到一个大的map集合中   ScalarHandler -- 封装的是聚集函数(count sum avg max min)

 例子:

    重写Java ee_02版本增删检查方法:

    重写前的UserDaoImpl类:

package org.Impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.dao.UserDao;
import org.model.User;
import org.util.DBUtil; /**
*
* @author H_Pioneer
* 接口实现类
*/ public class UserDaoImpl implements UserDao{
@Override
// 定义添加方法
public boolean addUser(User u) { boolean flag=false;
Connection conn=null;
PreparedStatement pst=null; try{
conn=DBUtil.getConnection();
String sql="insert into user (username,password) values(?,?)";
pst=conn.prepareStatement(sql); pst.setString(1, u.getName());
pst.setString(2, u.getPassword()); int rows= pst.executeUpdate(); if (rows > 0){
flag=true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
DBUtil.closeResource(conn, pst);
}
return flag; } @Override
public User getUserByName(String username) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
User u = new User();
String sql = "select * from user where username ="+"'"+username+"'"; try {
conn = DBUtil.getConnection();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} try { st = conn.createStatement();
rs = st.executeQuery(sql); while(rs.next()){
u.setName(rs.getString("username"));
u.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.closeResource(conn,st,rs);
}
return u; } @Override
public boolean checkLogin(String username, String password) { boolean flag = false;
User u = new User();
u = getUserByName(username); if(u.getPassword().equals(password)) {
flag = true;
}
return flag;
}
}

    重写后的UserDaoImpl类:

package org.Impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.dao.UserDao;
import org.model.User;
import org.util.DBUtil; import com.mchange.v2.c3p0.ComboPooledDataSource; public class IUserDaoImpl implements UserDao { @Override
public boolean addUser(User u) { boolean flag = false; QueryRunner runner = new QueryRunner(DBUtil.getDataSource()); String sql="insert into user (username,password) values(?,?)"; try { int rows = runner.update(sql , new String[]{u.getName(),u.getPassword()});
if (rows > 0){
flag=true;
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
} @Override
public User getUserByName(String username) {
User u= new User(); QueryRunner runner = new QueryRunner(DBUtil.getDataSource()); String sql = "select * from user where username =?"; try { u = runner.query(sql, new BeanHandler<User>(User.class),username ); } catch (SQLException e) { e.printStackTrace();
}
return u;
} @Override
public boolean checkLogin(String username, String password) {
boolean flag = false;
User u = new User();
u = getUserByName(username); if(u.getPassword().equals(password)) {
flag = true;
}
return flag;
}
}
 
 

DBUtils工具类的使用的更多相关文章

  1. Java学习笔记49(DBUtils工具类二)

    上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...

  2. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  3. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...

  4. DBUtils工具类和DBCP连接池

    今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...

  5. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  6. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  7. dbutils工具类使用

    1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...

  8. DBUtils工具类学习一

    Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 1.特征 DBUtils是java编程中 ...

  9. Java学习笔记48(DBUtils工具类一)

    上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...

随机推荐

  1. asp.net 汉字转拼音类

    前段时间公司人员反应OA里的汉字拼音首字母不准他们又要用,没办法自己就从网上搜有没有好的,看了很多都是首字母拼不出来或有些字母变为另一个,但最后找了很多还是有一个好用的,暂未发现有不准的. using ...

  2. C#线程/进程同步(lock、Mutex、Semaphore)

    一.lock(实质是Monitor.Enter和Monitor.Exit)(线程同步) 二.Mutex(互斥量)(线程/进程同步) Mutex有个好的特性是,如果程序结束时而互斥锁没通过Release ...

  3. 微信开发之c#下jssdk签名生成

    参考文章 :微信JS-SDK 权限签名算法 C#版 这篇文章讲解的的比较详细,而且算法准确,但是这篇文章有几个错误的地方需要注意; url必须动态生成 url不能写死,否则就算结果和官方检测的一致,也 ...

  4. vim 在 cmdline 内粘贴的方法

    vim 在 cmdline 内粘贴的方法: 先按下 Ctrl-r ,然后选择从哪个剪贴板上粘贴 0 (yank register), 1 to 9 (shifting delete registers ...

  5. 201621123023《Java程序设计》第2周学习总结

    一. 本周学习总结 引用类型变量存放指向对象的引用(类似于地址): == 与 equals 区别在于:==比较的是引用是否相等, 而equals则比较指向对象的内容是否相等: 因为String的不可变 ...

  6. Python操作配置文件configparser模块

    在实际的开发过程中,我们常有操作ini格式和conf格式配置文件的操作,Python为我们提供了configparser模块,方便我们对配置文件进行读写操作. config.ini配置文件内容如下: ...

  7. c++实验4 栈及栈的应用+回文+中、后缀表达式

    栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType ...

  8. Codeforces 464E. The Classic Problem

    题目大意 给定一张$n$个点, $m$条边的无向图,求$S$ 到$T$的最短路,其中边权都是$2^k$的形式$n,m,k<=10^5$,结果对$10^9+7$取模 题解 大佬好厉害 跑一边dij ...

  9. codis__通用的使用模式

    1,按功能模块分成不同的productName 参照 sample_user, sample_dynamic (见附件) sample_user.tar.gz,sample_dynamic.tar.g ...

  10. Oracle中对多行查询结果进行拼接

    to_char(wmsys.wm_concat(to_char( st.col_name))) as new_name to_char: 将当前值转换成字符串类型; wmsys.wm_concat:拼 ...