编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

DBUtil数据库操作应用快速入门(db数据库使用教程)

wxchong 2024-09-19 06:01:12 开源技术 19 ℃ 0 评论

以前写过一个有关DBUtil的简介和分页处理,参考连接:DBUtil及分页实现

1.概述

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。在不使用框架的情况下,使用DBUtils的概率非常大。

DBUtils三个核心功能介绍:

  • QueryRunner类,提供对sql语句操作的API
  • ResultSetHandler接口,用于定义select操作后,怎样封装结果集
  • DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

2.QueryRunner核心类

  • QueryRunner(Database ds),提供了数据源(连接池),DBUtils底层自动维护connection
  • update(String sql, Object... params),执行更新数据。(增、删、改)
  • query(String sql, ResultSetHandler<T> rsh, Object... params),执行查询

3.ResultSetHandler结果处理集类

我们知道在执行select语句之后得到的是ResultSet,然后我们还需要对ResultSet进行转换,得到最终我们想要的数据。你可能希望把ResultSet的数据放到一个List中,也可能想把数据放到一个Map中,或是一个Bean中。

DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具。你可以自己去实现这个接口,把ResultSet转换成你想要的类型。

DBUtils提供了很多个ResultSetHandler接口的实现,这些实现已经基本够用了,我们通常不用自己去实现ResultSet接口了。

  • MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键
  • MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;
  • BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
  • BeanListHandler:多行处理器!把结果集转换成List<Bean>;
  • ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
  • ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。

Map处理器:

每一条记录作为一个Map,Map的key是字段名称。

Bean处理器 :

必须搞一个javaBean。

Column处理器:

Scalar处理器:

(4)DbUtils工具类

  • closeQuietly(Connection conn) 关闭连接,如果有异常try后不抛
  • commitAndCloseQuietly(Connection conn) 提交并关闭连接
  • rollbackAndCloseQuietly(Connection conn) 回滚并关闭连接

3. 应用示例-增删改查

Bean对象类User:

public class User {
 private int uid;
 private String uname;
 private String upassword;
 public User() {
 }
 public int getUid() {
 return uid;
 }
 public void setUid(int uid) {
 this.uid = uid;
 }
 public String getUname() {
 return uname;
 }
 public void setUname(String uname) {
 this.uname = uname;
 }
 public String getUpassword() {
 return upassword;
 }
 public void setUpassword(String upassword) {
 this.upassword = upassword;
 }
}

数据库连接工具类

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
 private static ComboPooledDataSource dataSource = new ComboPooledDataSource("itheima");
 public static DataSource getDataSource() {
 return dataSource;
 }
 public static Connection getConnection() {
 try {
 return dataSource.getConnection();
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
}

增删改处理:

import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import cn.itheima.jdbc.utils.C3P0Utils;
/**
 * 测试DBUtils工具类的增删改操作
 * 
 */
public class TestDBUtils1 {
 /**
 * 添加所有用户方法
 */
 @Test
 public void testAddUser() {
 try {
 // 1.创建核心类QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写SQL语句
 String sql = "insert into user values(null,?,?)";
 // 3.为占位符设置值
 Object[] params = { "薛淮", "赵耿" };
 // 4.执行添加操作
 int rows = qr.update(sql, params);
 if (rows > 0) {
 System.out.println("添加成功!");
 } else {
 System.out.println("添加失败!");
 }
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 /**
 * 根据id修改用户方法
 * 
 */
 @Test
 public void testUpdateUserById() {
 try {
 // 1.创建核心类QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写SQL语句
 String sql = "update user set upassword=? where uid=?";
 // 3.为站位符设置值
 Object[] params = { "xxx", 21 };
 // 4.执行添加操作
 int rows = qr.update(sql, params);
 if (rows > 0) {
 System.out.println("修改成功!");
 } else {
 System.out.println("修改失败!");
 }
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 /**
 * 根据id删除用户方法
 */
 @Test
 public void testDeleteUserById() {
 try {
 // 1.创建核心类QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写SQL语句
 String sql = "delete from user where uid=?";
 // 3.为站位符设置值
 Object[] params = {19};
 // 4.执行添加操作
 int rows = qr.update(sql, params);
 if (rows > 0) {
 System.out.println("删除成功!");
 } else {
 System.out.println("删除失败!");
 }
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
}
TestDBUtils1.java --添加、删除、更新

查询示例:

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
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.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import cn.itheima.domain.User;
import cn.itheima.jdbc.utils.C3P0Utils;
/**
 * 测试DBUtils查询操作
 * 
 */
public class TestDBUtils2 {
 /*
 * 查询所有用户方法
 */
 @Test
 public void testQueryAll() {
 try {
 // 1.获取核心类queryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写sql语句
 String sql = "select * from user";
 // 3.执行查询操作
 List<User> users = qr.query(sql, new BeanListHandler<User>(User.class));
 // 4.对结果集集合进行遍历
 for (User user : users) {
 System.out.println(user.getUname() + " : " + user.getUpassword());
 }
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
 /*
 * 根据id查询用户方法
 */
 @Test
 public void testQueryUserById() {
 try {
 // 1.获取核心类queryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写sql语句
 String sql = "select * from user where uid=?";
 //3.为占位符设置值
 Object[] params = {21};
 // 4.执行查询操作
 User user = qr.query(sql, new BeanHandler<User>(User.class), params);
 System.out.println(user.getUname() + " : " + user.getUpassword());
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
 /*
 * 根据所有用户的总个数
 */
 @Test
 public void testQueryCount() {
 try {
 // 1.获取核心类queryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写sql语句
 String sql = "select count(*) from tbl_user";
 // 4.执行查询操作
 Long count = (Long) qr.query(sql, new ScalarHandler());
 System.out.println(count);
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
 /*
 * 查询所有用户方法
 */
 @Test
 public void testQueryAll1() {
 try {
 // 1.获取核心类queryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写sql语句
 String sql = "select * from user";
 // 3.执行查询操作
 List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
 // 4.对结果集集合进行遍历
 for (Map<String, Object> map : list) {
 System.out.println(map);
 }
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
 /*
 * 查询所有用户方法
 */
 @Test
 public void testQueryAll2() {
 try {
 // 1.获取核心类queryRunner
 QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
 // 2.编写sql语句
 String sql = "select * from user";
 // 3.执行查询操作
 List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
 // 4.对结果集集合进行遍历
 for (Object object : list) {
 System.out.println(object);
 }
 } catch (SQLException e) {
 throw new RuntimeException(e);
 }
 }
}
//TestDBUtils2.java --查询操作

【注意】:DBUtils在创建QueryRunner时传入dataSource对象,每次在执行完之后都会自动关闭Connection连接对象。(就相当于把conn交给dbutils管理了,他会帮我们关掉)

如果没有传入dataSource的话,需要手动关闭。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表