DbUtils框架

DbUtils框架

一.DbUtils框架概述

1.DbUtils

  • 为了更加简单且高效地使用JDBC,Apache组织提供了数据库操作工具类commons-dbutils,该工具可以自动完成:创建连接、封装结果、释放资源。
  • DbUtils对JDBC进行了封装,可简化JDBC的编码工作量(例:DbUtils在查询数据时可把结果转换成List,Array,Set等集合)。

2.DbUtils下载官网

  • http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

3.DbUtils三大核心

(1)DbUtils工具类

  • 该类主要用于关闭连接、装载JDBC驱动程序等

(2)ResultSetHandler接口

  • 该接口及其实现类主要用于处理结果集

(3)QueryRunner类

  • 该类主要用于增,删,改,查

二.DbUtils相关jar包

  • mysql-connector-java-5.0.8-bin.jar
  • commons-dbutils-1.4.jar
  • c3p0-0.9.1.2.jar

三.DbUtils三大核心方法

1.DbUtils工具类

方法方法描述
public static boolean loadDriver(java.lang.String driverClassName)该方法用于方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,不需要捕捉ClassNotFoundException
public static void close(Connection conn,Statement stmt, ResultSet rs) throws java.sql.SQLException该类方法用于关闭Connection、Statement和ResultSe
public static void closeQuietly(Connection conn,Statement stmt, ResultSet rs):该类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception
public static void commitAndCloseQuietly(Connection conn)该方法用于提交事务并关闭连接,而且在关闭连接时不抛出SQL异常。
public static void rollbackAndCloseQuietly(Connection conn)该方法用于回滚事务并关闭连接,而且在关闭连接时不抛出SQL异常。

2.ResultSetHandler接口

实现类实现类描述
BeanHandler将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler将结果集中的每一行数据都封装到一个对应的JavaBean实例中,再存放到List里
ArrayHandler把结果集中的第一行数据转成对象数组
ArrayListHandler把结果集中的每一行数据都转成一个数组存放到List中
ColumnListHandler将结果集中某一列的数据存放到List中
KeyedHandler(name)将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key
MapHandler将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
MapListHandler将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ScalarHandler将结果集中某一条记录的其中某一列的数据存储成Object对象;常用于获取聚合函数的值

3.QueryRunner类

方法方法描述
QueryRunner()采用该方法创建QueryRunner时数据库的事务可由我们自己手动控制。
正因为该构造方法无参,所以在调用该对象的query、update、等方法时需要传入参数Connection。
利用QueryRunner的无参构造函数即QueryRunner( )创建QueryRunner执行数据库操作后需要手动关闭数据库连接Connection
public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException该方法用于执行查询,在该查询中Object数组里的每个值被用来作为查询语句的置换参数。该方法会自行处理PreparedStatement和ResultSet的创建和关闭。
public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException该方法与上面的这个方法基本一样;不同的是它不用传入参数Connection
public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException该方法与上面的两个方法基本一样,它用于执行一个不需要置换参数的查询操作。
public int update(Connection conn, String sql, Object[] params) throws SQLException该方法用于执行更新操作(例如:增加、删除、更新),在该查询中Object数组里的每个元素值被用来作为更新语句的置换参数
public int update(Connection conn, String sql) throws SQLException该方法与上面的方法基本一样,用来执行一个不需要置换参数的更新操作。
public int update(String sql) throws SQLException该方法与上面的方法基本一样,用来执行一个不需要置换参数和不指定Connection的更新操作。

四.DbUtils简单封装

package cn.com.demo06;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;

import org.apache.commons.dbutils.DbUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUtils {
	
    //创建数据库连接池
    private static DataSource dataSource = new ComboPooledDataSource();
  	
    //获取数据库连接池
  	public static DataSource getDataSource() {
  		return dataSource;
  	}

    //创建连接
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException("获取数据库连接失败");
        }
    }

    //释放连接
    public static void releaseConnection(Connection connection, Statement statement, ResultSet resultSet) {
        DbUtils.closeQuietly(connection, statement, resultSet);
    }
}

五.DbUtils简单使用示例

1.创建表

-- 若存在数据库mydb则删除
DROP DATABASE IF EXISTS mydb;
-- 创建数据库mydb
CREATE DATABASE mydb;
-- 选择数据库mydb
USE mydb;

-- 创建表
CREATE TABLE membershipcard (
    id int primary key auto_increment, 
    username varchar(40),
    password varchar(40), 
    email varchar(40), 
    birthday date 
);

-- 插入数据
INSERT INTO membershipcard (username,password,email,birthday) VALUES ("lili","lili123","lili@sina.com","1999-08-14");
INSERT INTO membershipcard (username,password,email,birthday) VALUES ("fafa","fafa456","fafa@sohu.com","1998-07-15");
INSERT INTO membershipcard (username,password,email,birthday) VALUES ("guigui","guigui333","guigui@sina.com","1997-06-16");
INSERT INTO membershipcard (username,password,email,birthday) VALUES ("bing","bing666","bing@sohu.com","1996-05-17");

2.实体类

package cn.com.demo06;

import java.util.Date;

public class MembershipCard {
	private int id;
	private String username;
	private String password;
	private String email;
	private Date birthday;
	public MembershipCard() {
		
	}
	public MembershipCard(int id, String username, String password, String email, Date birthday) {
		this.id = id;
		this.username = username;
		this.password = password;
		this.email = email;
		this.birthday = birthday;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "MembershipCard [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email
				+ ", birthday=" + birthday + "]";
	}
	
}

3.DbUtils实现增删改查

package cn.com.demo06;

import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class TestDBUtils1 {

	public static void main(String[] args) {
		try {
			TestDBUtils1 demo = new TestDBUtils1();
			demo.testSelectAll();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
+
	// 插入数据
	public void testInsert() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		Date birthday = Date.valueOf("1997-07-01");
		String sql = "insert into membershipcard(username,password,email,birthday) values(?,?,?,?)";
		Object params[] = { "huhu", "huhu777", "huhu@sina.com", birthday };
		qr.update(sql, params);
	}

	// 更新数据
	public void testUpdate() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "update membershipcard set password=? where username=?";
		Object params[] = { "888888", "huhu" };
		qr.update(sql, params);
	}

	// 删除数据
	public void testDelete() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "delete from membershipcard where username=?";
		Object params[] = { "huhu" };
		qr.update(sql, params);
	}

	// 查询单个数据
	public void testSelect() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard where username=?";
		Object params[] = { "lili" };
		BeanHandler<MembershipCard> beanHandler=new BeanHandler<>(MembershipCard.class);
		MembershipCard membershipCard=qr.query(sql, beanHandler, params);
		System.out.println(membershipCard);
	}

	// 查询所有数据
	public void testSelectAll() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql="select * from membershipcard";
		BeanListHandler<MembershipCard> beanListHandler = new BeanListHandler<MembershipCard>(MembershipCard.class);
		List<MembershipCard> list = qr.query(sql, beanListHandler);
		for (MembershipCard membershipCard : list) {
			System.out.println(membershipCard);
		}
	}

}

4.DbUtils实现查询

package cn.com.demo06;

import java.sql.SQLException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
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.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

public class TestDBUtils2 {

	public static void main(String[] args) {
		try {
			TestDBUtils2 demo = new TestDBUtils2();
			demo.testBeanListHandler();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	//BeanHandler
	public void testBeanHandler() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard where username=?";
		Object params[] = { "lili" };
		BeanHandler<MembershipCard> beanHandler = new BeanHandler<>(MembershipCard.class);
		MembershipCard membershipCard = qr.query(sql, beanHandler, params);
		System.out.println(membershipCard);
	}

	//BeanListHandler
	public void testBeanListHandler() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		BeanListHandler<MembershipCard> beanListHandler = new BeanListHandler<MembershipCard>(MembershipCard.class);
		List<MembershipCard> list = qr.query(sql, beanListHandler);
		for (MembershipCard membershipCard : list) {
			System.out.println(membershipCard);
		}
	}
	
	//ArrayHandler
	public void testArrayHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		ArrayHandler arrayHandler=new ArrayHandler();
		Object[] resultArray = qr.query(sql, arrayHandler);
		for(Object o:resultArray) {
			System.out.println(o);
		}
		System.out.println(Arrays.asList(resultArray));
	}
	
	//ArrayListHandler
	public void testArrayListHandler() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		ArrayListHandler arrayListHandler=new ArrayListHandler();
		List<Object[]> list=qr.query(sql, arrayListHandler);
		for(Object[] obj:list) {
			System.out.println(Arrays.asList(obj));
		}
	}
	
	//ColumnListHandler
	public void testColumnListHandler() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		ColumnListHandler columnListHandler=new ColumnListHandler("username");
		List<Object> list = qr.query(sql, columnListHandler);
		for(Object obj:list) {
			System.out.println(obj);
		}
	}
	
	//KeyedHandler
	public void testKeyedHandler() throws SQLException {
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		KeyedHandler keyedHandler = new KeyedHandler("username");
		Map<Object, Map<String, Object>> resultMap = qr.query(sql, keyedHandler);
		Set<Object> resultMapKeySet = resultMap.keySet();
		Iterator<Object> resultMapIterator = resultMapKeySet.iterator();
		while(resultMapIterator.hasNext()) {
			Object resultMapKey = resultMapIterator.next();
			System.out.println("key="+resultMapKey);
			Map<String, Object> innerMap = resultMap.get(resultMapKey);
			Set<String> innerMapKeySet = innerMap.keySet();
			Iterator<String> innerMapIterator = innerMapKeySet.iterator();
			while(innerMapIterator.hasNext()) {
				String innerMapKey = innerMapIterator.next();
				Object innerMapValue = innerMap.get(innerMapKey);
				System.out.println(innerMapKey+"="+innerMapValue);
			}
			System.out.println();
		}
	}
	
	//MapHandler
	public void testMapHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		MapHandler mapHandler=new MapHandler();
		Map<String, Object> map = qr.query(sql, mapHandler);
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		while(iterator.hasNext()) {
			String key = iterator.next();
			Object value = map.get(key);
			System.out.println(key+"="+value);
		}
	}
	
	//测试MapListHandler
	public void testMapListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select * from membershipcard";
		MapListHandler mapListHandler=new MapListHandler();
		List<Map<String,Object>> list = qr.query(sql, mapListHandler);
		for(int i=0;i<list.size();i++) {
			Map<String, Object> map = list.get(i);
			Set<String> keySet = map.keySet();
			Iterator<String> iterator = keySet.iterator();
			while(iterator.hasNext()) {
				String key = iterator.next();
				Object value = map.get(key);
				System.out.println(key+"="+value);
			}
			System.out.println();
		}
	}
	
	//ScalarHandler
	public void testScalarHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
		String sql = "select count(*) from membershipcard";
		ScalarHandler scalarHandler=new ScalarHandler();
		String result = qr.query(sql,scalarHandler).toString();
		System.out.println(Integer.valueOf(result));
	}

}

六.DbUtils处理事务

  • DbUtils常在Service层获得连接Connection得以保证涉及事务操作的Connection对象为同一个

1.创建表

DROP DATABASE IF EXISTS mydb;
-- 创建数据库
CREATE DATABASE mydb;
-- 选择数据库mydb
USE mydb;
-- 创建account表
CREATE TABLE account(
   id INT primary key auto_increment, 
   name VARCHAR(40), 
   money FLOAT
);

-- 插入数据
INSERT INTO account(name, money) VALUES ('A',1000);
INSERT INTO account(name, money) VALUES ('B',1000);

2.AccountDao

package cn.com.demo06;

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;

public class AccountDao {
	//转出别人
	public void outMoney(Connection connection, String from, float money) {
        QueryRunner qr = new QueryRunner();
        try {
            String sql = "update account set money = money - ? where name = ?";
            Object params[] = {money,from};
            qr.update(connection, sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        } 
    }

	//转入自己
    public void inMoney(Connection connection, String to, float money) {
        QueryRunner qr = new QueryRunner();
        try {
            String sql = "update account set money = money + ? where name = ?";
            Object params[] = {money,to};
            qr.update(connection, sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3.AccountService

package cn.com.demo06;

import java.sql.Connection;
import org.apache.commons.dbutils.DbUtils;

public class AccountService {
	
    public void transfer(String from, String to, float money) {
        AccountDao accountDao = new AccountDao();
        Connection connection = null;
        try {
            //获得连接
            connection = DBUtils.getConnection();
            //设置事务不自动提交
            connection.setAutoCommit(false);
            accountDao.outMoney(connection,from,money);
            //模拟异常
            //int error = 1/0 ;
            accountDao.inMoney(connection,to,money);
            //提交事务并安静地关闭连接
            DbUtils.commitAndCloseQuietly(connection);
        } catch (Exception e) {
            //异常出现时,回滚事务并安静地关闭连接
            DbUtils.rollbackAndCloseQuietly(connection);
            //e.printStackTrace();
        }
    }
}

4.测试DbUtils事务处理

package cn.com.demo06;

public class TestDBUtils {
	public static void main(String[] args) {
		AccountService accountService=new AccountService();
		accountService.transfer("A", "B", 200);
		System.out.println("transfer 结束");
	}

}

七.DbUtils实用封装

1.创建数据库及表

-- 若存在数据库mydb则删除
DROP DATABASE IF EXISTS mydb;
-- 创建数据库mydb
CREATE DATABASE mydb;
-- 选择数据库mydb
USE mydb;

-- 创建表
CREATE TABLE user (
    id int primary key auto_increment, 
    username varchar(40),
    password varchar(40), 
    email varchar(40), 
    birthday date 
);

-- 插入数据
INSERT INTO user (username,password,email,birthday) VALUES ("lili","lili123","lili@sina.com","1999-08-14");
INSERT INTO user (username,password,email,birthday) VALUES ("fafa","fafa456","fafa@sohu.com","1998-07-15");
INSERT INTO user (username,password,email,birthday) VALUES ("guigui","guigui333","guigui@sina.com","1997-06-16");
INSERT INTO user (username,password,email,birthday) VALUES ("bing","bing666","bing@sohu.com","1996-05-17");

2.编写c3p0-config.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://localhost:3306/mydb</property>
    <property name="user">root</property>
    <property name="password">test</property>
    <property name="initialPoolSize">15</property>
    <property name="maxIdleTime">40</property>
    <property name="maxPoolSize">150</property>
    <property name="minPoolSize">20</property>
  </default-config>
</c3p0-config>

3.编写User

package cn.com.demo07;

import java.util.Date;

public class User {
	private int id;
	private String username;
	private String password;
	private String email;
	private Date birthday;

	public User() {

	}

	public User(int id, String username, String password, String email, Date birthday) {
		this.id = id;
		this.username = username;
		this.password = password;
		this.email = email;
		this.birthday = birthday;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email+ ", birthday=" + birthday + "]";
	}

}

4.编写DBUtils

  • C3P0连接池的配置文件名称必须为c3p0-config.xml
  • 读取配置文件、加载驱动类、创建连接等操作均由连接池自动完成
package cn.com.demo07;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * 数据库操作工具类
 */
public class DBUtils {
	private static DataSource datasource;

	static {
		try {	
			datasource = new ComboPooledDataSource();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库链接
	 */
	public static Connection getConnection(){
		Connection connection = null;	
		try {
			connection = datasource.getConnection();			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
	
	/**
	 * 执行更新操作:增加、修改、删除
	 * @param sql SQL语句
	 * @param parameters SQL参数
	 * @return 0失败、1成功
	 */
	public static Integer executeUpdate(String sql,Object ...parameters){
		Connection connection = getConnection();
		QueryRunner queryRunner = new QueryRunner();
		Integer result = 0;
		try {
			if(parameters == null){
				result = queryRunner.update(connection, sql);
			}else{
				result = queryRunner.update(connection, sql, parameters);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}		
		
		return result;
	}
	
	/**
	 * 执行更新操作:增加、修改、删除
	 */
	public static Integer executeUpdate(String sql){
		Object [] parameters=null;
		return executeUpdate(sql, parameters);
	}
	
	/**
	 * 执行查询操作
	 * @param <T> 实体泛型
	 * @param sql SQL语句
	 * @param clazz 实体的Class
	 * @param parameters SQL参数
	 * @return 存放Bean的list
	 */
	public static <T> List<T> executeQuery(String sql,Class<T> clazz,Object ...parameters){
		Connection connection = getConnection();
		List<T> list = null;
		try{
			QueryRunner queryRunner = new QueryRunner();
			BeanListHandler<T> beanListHandler = new BeanListHandler<T>(clazz);
			if(parameters == null){
				list = queryRunner.query(connection, sql,beanListHandler); 
			}else{
				list = queryRunner.query(connection, sql,beanListHandler,parameters); 
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return list;
	}
	
	/**
	 * 执行查询操作
	 */
	public static <T> List<T> executeQuery(String sql,Class<T> clazz){
		Object [] parameters=null;
		return executeQuery(sql,clazz,parameters);
	}
	/**
	 * 查询记录数
	 */
	public static int getCount(String sql){
		Connection connection = getConnection();
		QueryRunner queryRunner = new QueryRunner();
		Integer count = null;
		try {
			Long longCount= (Long) queryRunner.query(connection,sql,new ScalarHandler(1));
			count = longCount.intValue();
		}catch (Exception e){
			e.printStackTrace();
		}
		return count;
	}
}

5.编写TestDBUtils

package cn.com.demo07;

import java.util.List;

public class TestDBUtils {

	public static void main(String[] args) {
		TestDBUtils test = new TestDBUtils();
		List<User> userList1 = test.testQuery1();
		for (User user : userList1) {
			System.out.println(user);
		}
		System.out.println("-----------------");
		List<User> userList2 = test.testQuery2("lili");
		for (User user : userList2) {
			System.out.println(user);
		}
		System.out.println("-----------------");
		List<User> userList3 = test.testQuery3("lili", "123456");
		for (User user : userList3) {
			System.out.println(user);
		}
		System.out.println("-----------------");
		int result = test.testUpdate("lili", "666666", "lili@sohu.com");
		if(result>0) {
			List<User> userList = test.testQuery1();
			for (User user : userList) {
				System.out.println(user);
			}
		}else {
			System.out.println("更新用户失败");
		}
	}

	// 查询所有用户
	public List<User> testQuery1() {
		String sql = "select * from user";
		List<User> list = DBUtils.executeQuery(sql, User.class);
		return list;
	}

	// 依据用户名查询用户
	public List<User> testQuery2(String username) {
		String sql = "select * from user where username=?";
		List<User> list = DBUtils.executeQuery(sql, User.class, username);
		return list;
	}

	// 依据用户名和密码查询用户
	public List<User> testQuery3(String username, String password) {
		String sql = "select * from user where username=? and password=?";
		List<User> list = DBUtils.executeQuery(sql, User.class, username, password);
		return list;
	}

	//更新用户
	public int testUpdate(String username, String password, String email) {
		String sql = "update user set password=? , email=? where username=?";
		int result = DBUtils.executeUpdate(sql, password, email, username);
		return result;
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改查了。代码看着也很简洁。 例如: 增删改查使用的类:QueryRunner类+ResultSetHandler类,使用这俩类就可以解决掉。 QueryRunner类的query()方法:new QueryRunner().query(Connection conn, String sql, ResultSetHandler rsh) query方法后面参数中加一个Connection连接,是在获取不到数据源的情况下,也就是说,QueryRunner的实例化构造函数使用无参的那个,下面我的实现代码就是用的这种方法。 当然还有一种实例化:new QueryRunner(new Datasource()).query(String sql, ResultSetHandler rsh) query方法中的参数 ResultSetHandler 参数中加上ResultSetHandler接口的实现类参数(下面这些实现类),执行完SQL后,返回的数据就是已经封装好的我们想要的结果了。 ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成Bean对象 BeanListHandler :将ResultSet中所有的数据转化成List ColumnListHandler :将ResultSet中某一列的数据存成List KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map,Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map MapListHandler :将ResultSet中所有的数据存成List<Map> ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼不咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值