QueryRunner
需要导入一个包:
commons-dbutils-1.7.jar
QueryRunner
:执行sql语句的类
- 创建QueryRunner
- 构造器:
QueryRunner()
,在事务里面使用; - 构造器:
QueryRunner(连接池对象)
- 构造器:
update()
:执行INSERT、UPDATE、DELETEquery()
:执行SELECT
update方法和query方法的返回值:
ResultSetHandler接口
BeanHandler(单行)
:构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的javaBean对象;
BeanListHandler(多行)
:构造器也是需要一个Class类型的参数,用来把一行结果集转换成一个javabean,那么多行就是转换成List对象,一堆javabean;
ScalarHandler(单行单列)
:通常用与select count(*) from t_stu语句!结果集是单行单列的!它返回一个Object 聚合函数。类型为Long
事务的处理
import com.qfedu.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AccountDao {
/*
* 提款withdrawal
* */
public void withdrawal(String cardNum, double money) throws SQLException {
String sql = "update account set money=money-? where cardNum=?";
Object[] params = {money, cardNum};
QueryRunner qr = new QueryRunner();
qr.update(JdbcUtils.getConnection(), sql, params);
}
/*
* 存款deposit
* */
public void deposit(String cardNum, double money) throws SQLException {
String sql = "update account set money=money+? where cardNum=?";
Object[] params = {money, cardNum};
QueryRunner qr = new QueryRunner();
qr.update(JdbcUtils.getConnection(), sql, params);
}
}
import com.qfedu.dao.AccountDao;
import com.qfedu.utils.JdbcUtils;
import java.sql.SQLException;
public class AccountService {
private AccountDao accountDao = new AccountDao();
//转账操作
public void trans(String src, String dst, double money) {
try {
JdbcUtils.beginTransaction();
accountDao.withdrawal(src, money);
//int i = 100/0;
accountDao.deposit(dst, money);
JdbcUtils.commitTransaction();
} catch (Exception e) {
e.printStackTrace();
try {
JdbcUtils.rollbackTransaction();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
测试代码
需要导入两个包:
junit-4.12.jar
hamcrest-core-1.3.jar
@Test
public void testTransaction() {
AccountService accountService = new AccountService();
accountService.trans("10001", "10002", 1000);
}