DBUtils工具类学习一
commons dbutils是apache组织提供的一个对jdbc进行简单封装的开源工具类库,使用它能够简化jdbc应用程序的开发,同时也不会影响程序的性能
1、特征
dbutils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,他可以把结果转换成list,array,set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用jndi,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。
2、dbutils提供了三个核心的功能
2.1queryrunner中提供对sql语句操作的api
queryrunner(datasource ds),提供数据源(连接池),dbutils底层自动维护了连接connection
arrayhandler:将结果集中的第一条记录封装到object[]数组中,数组中的每一个元素即使这条记录中的每一个字段的值 closequietly(connetion conn)关闭连接,有异常就会抛出 3.1maven依赖 3.2querydbutils代码 c3p0utils.java user.java
update(string sql, object...params),执行更新数据
query(string sql,resultsethandler2.2 resultsethandler接口,用于定义select操作后,怎样封装结果集
arraylisthandler:将结果集中的每一条记录封装到object[]数组中,将这些数组再封装到list集合中
beanhandler:将结果集中的第一条记录封装到一个指定的javabean中
beanlisthandler:将结果集中每一条记录封装到javabean中,将这些javabean再封装到list集合中
columnlisthandler:将结果集中指定列的字段值封装到一个list集合中
keyedhandler:将结果集中的每一条记录封装到map<string,object>,再讲这个map集合作为另一个map的value,另一个map集合的key是指定的字段的值
maphandler:将结果集中的第一条记录封装到map<string,object>集合中,key就是字段名称,value就是字段的值
maplisthandler:将结果集中的每一条记录封装到map<string,object>集合中,key就是字段名称,value就是字段的值,再将这些map封装到list集合中
scalarhandler:它是用于单数据,列如:select count(1) from 表操作2.3 dbutils类,就是一个工具类,定义了关闭资源和事务处理的方法
commitandclosequietly(connetion conn):提交并关闭连接
rollbackandclosequietly(connetion conn):回滚并关闭连接3、dbutils操作代码demo
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>5.1.44</version>
</dependency>
<dependency>
<groupid>com.mchange</groupid>
<artifactid>c3p0</artifactid>
<version>0.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
<groupid>commons-dbutils</groupid>
<artifactid>commons-dbutils</artifactid>
<version>1.7</version>
</dependency>
package com.rookie.bigdata.dbutils;
import com.rookie.bigdata.domain.user;
import com.rookie.bigdata.util.c3p0utils;
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.scalarhandler;
import java.sql.sqlexception;
import java.util.list;
/**
* created by dell on 2019/5/24.
*/
public class querydbutils {
public static void main(string[] args) {
//insertmethod();
//updatemethod();
//deletemethod();
//selectallusermethod();
//selectusermethod();
try {
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
string sql = "select count(*) from user ";
long count=(long)qr.query(sql, new scalarhandler());
system.out.println(count);
} catch (exception e) {
e.printstacktrace();
}
}
//查询单个用户方法
private static void selectusermethod() {
try {
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
string sql = "select * from user where username=?";
object[] params = {"李四"};
user user = qr.query(sql, new beanhandler<user>(user.class), params);
system.out.println(user);
} catch (exception e) {
e.printstacktrace();
}
}
//查询所有的用户信息
private static void selectallusermethod() {
try {
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
string sql = "select * from user";
list<user> userlist = qr.query(sql, new beanlisthandler<user>(user.class));
for (user user : userlist) {
system.out.println(user);
}
} catch (exception e) {
e.printstacktrace();
}
}
//删除操作
private static void deletemethod() {
try {
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
string sql = "delete from user where username=?";
object[] params = {"李四"};
int update = qr.update(sql, params);
system.out.println("删除了" + update + "记录");
} catch (exception e) {
e.printstacktrace();
}
}
//更新记录操作
private static void updatemethod() {
try {
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
string sql = "update user set password=? where username=?";
object[] params = {"654321", "李四"};
int update = qr.update(sql, params);
system.out.println("更新了" + update + "记录");
} catch (exception e) {
e.printstacktrace();
}
}
/**
* 查询操作
*/
private static void insertmethod() {
try {
// 1.创建核心类queryrunner
queryrunner qr = new queryrunner(c3p0utils.getdatasource());
// 2.编写sql语句
string sql = "insert into user values(?,?)";
// 3.为站位符设置值
object[] params = {"李四", "123456"};
// 4.执行添加操作
int rows = qr.update(sql, params);
system.out.println("添加成功!" + rows);
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
}
package com.rookie.bigdata.util;
import com.mchange.v2.c3p0.combopooleddatasource;
import javax.sql.datasource;
import java.sql.connection;
import java.sql.preparedstatement;
import java.sql.resultset;
import java.sql.sqlexception;
/**
* created by dell on 2019/5/23.
*/
public class c3p0utils {
private static combopooleddatasource datasource = new combopooleddatasource("mysql");
public static datasource getdatasource() {
return datasource;
}
public static connection getconnection() {
try {
return datasource.getconnection();
} catch (sqlexception e) {
throw new runtimeexception(e);
}
}
//释放连接回连接池
public static void close(connection conn, preparedstatement pst, resultset rs) {
if (rs != null) {
try {
rs.close();
} catch (sqlexception e) {
e.printstacktrace();
}
}
if (pst != null) {
try {
pst.close();
} catch (sqlexception e) {
e.printstacktrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (sqlexception e) {
e.printstacktrace();
}
}
}
}
package com.rookie.bigdata.domain;
/**
* created by dell on 2019/5/25.
*/
public class user {
private string username;
private string password;
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;
}
@override
public string tostring() {
return "user{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}