数据库实用小工具之-DBUtils简单入门

1 DBUtils简介
DBUtils是Apache Commons组件中的一员,开源免费!
DBUtils是对JDBC的简单封装,但是它还是被很多公司使用!
DBUtils的Jar包:dbutils.jar

2 DBUtils主要类
?	DbUtils:都是静态方法,一系列的close()方法;
?	QueryRunner:
?	update():执行insert、update、delete;
?	query():执行select语句;
?	batch():执行批处理。

OK,我们卡死写一个例子,这里例子中,我们用c3p0作为数据库连接池,简单实用。

老规矩新建一个项目:

我把代码给附上:从上往下的顺序

package com;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
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.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

public class Domain {

	/**
	 * 测试添加
	 * @throws SQLException
	 */
	@Test
	public void testadd() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddlk");
		person.setMoney(10000);
		this.add(person);
	}
	/**
	 * 测试更新
	 * @throws SQLException
	 */
	@Test
	public void testupdata() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddddd");
		person.setMoney(100000);
		this.update(person);
	}

	/**
	 * 测试查询
	 * @throws SQLException
	 */
	@Test
	public void testquery() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddddd");
		person.setMoney(100000);
		this.update(person);
	}

	/**
	 * 测试删除
	 * @throws SQLException
	 */
	@Test
	public void testdelete() throws SQLException
	{
		//删除id为5的用户
		this.delete("5");
	}

	public void add(Person person) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "insert into person values(?,?,?);";
		qr.update(sql, person.getId(),person.getName(),person.getMoney());
	}

	public void update(Person person) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "update  person set name=? , money=? where id=?";
		qr.update(sql, person.getName(),person.getMoney(),person.getId());
	}

	public void delete(String person_id) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "delete from  person  where id=?";
		qr.update(sql,person_id);
	}

	//下面都是Query,查询是比较繁琐的,6种查询模式
	/**查询方法1:
	 * BeanHandler:单行结果集处理器,把数据封装到一个javaBean中
	 * @throws SQLException
	 */
	@Test
	public void query_1() throws SQLException
	{

		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from  person where id=?";

		/**
		 * ResultSetHandler接口只有一个方法:T handle(ResultSet)
		 * BeanHandler实现了这个接口,它会把结果集数据封装到Student对象中
		 */
		ResultSetHandler<Person> rsh = new BeanHandler<Person>(Person.class);
		Person person = qr.query(sql, rsh, "2");
		System.out.println(person.getName());

	}

	/**
	 * 查询方法2:
	 *  BeanListHandler --> 多行结果集处理器,把多行的数据封装到多个Bean对象中,返回一个List<Bean>
	 * @throws SQLException
	 * @throws SQLException
	 */
	@Test
	public void query_2() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person ";

		ResultSetHandler<List<Person>> rsh = new BeanListHandler<Person>(Person.class);
		List<Person> personlist = qr.query(sql, rsh);

		for(int i=0;i<personlist.size();i++)
		{
			//这返回的都是对象的list
			System.out.println(personlist.get(i));
		}

	}

	/**方法3
	 * MapHandler --> 单行处理器,把一行结果集封装到一个Map对象中
	 *
	 * 返回的map中key是列名称,值是列的值
	 *
	 */
	@Test
	public void query_3() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person where id=?";
		//mapHandler 单行处理,封装成一个map
		MapHandler map = new MapHandler();

		Map<String,Object> maps = qr.query(sql, map,"3");
		System.out.println(maps);

	}

	/**方法4
	 * MapListHandler -->多行处理器,把每行结果集封装到一个Map中,多行就是多个Map,即List<Map>
	 *
	 * 返回的map中key是列名称,值是列的值
	 *
	 */
	@Test
	public void query_4() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person ";
		//mapHandler 单行处理,封装成一个map
		MapListHandler map = new MapListHandler();

		List<Map<String,Object>> maps = qr.query(sql, map);
		//增强for循环
		for(Map<String,Object> map1: maps)
		{
			System.out.println(map1);
		}

	}

	/**方法5
	 * ColumnListHandler --> 一列多(单)行,用来处理单列查询,把该列的数据封装到一个List中
	 * @throws SQLException
	 *
	 */
	@Test
	public void query_5() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select name from person ";//如果是select * 那查询的是第一列
		ColumnListHandler columnListHandler = new ColumnListHandler();

		List<Object> personlist = qr.query(sql, columnListHandler);

		for(int i = 0;i<personlist.size();i++)
		{
			System.out.println(personlist.get(i));
		}

	}

	/**方法6
	 * ScalarHandler --> 通过用在聚合函数的使用,对单行单列进行查询
	 * @throws SQLException
	 */
	@Test
	public void query_6() throws SQLException {
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select count(*) from person";
		ScalarHandler shd = new ScalarHandler();
		Number number = (Number)qr.query(sql, shd);
		System.out.println(number.longValue());
	}

}
package com;

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * Jdbc工具
 * 提供连接池
 * 提供链接
 * @author 挨踢界小人物
 *
 */
public class JdbcUtils {
	public static DataSource ds = new ComboPooledDataSource("myc3p0");

	public static Connection getConnection() throws SQLException
	{
		return ds.getConnection();
	}

	public static DataSource getDataSource()
	{
		return ds;
	}
}
package com;

public class Person {
	private int id;
	private String name;
	private int money;

	public Person() {
		// TODO Auto-generated constructor stub
	}

	public Person(int id, String name, int money) {
		super();
		this.id = id;
		this.name = name;
		this.money = money;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

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

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}

}
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

    <named-config name="myc3p0">

        <!-- 指定连接数据源的基本属性:!这里的用户名密码要改成自己数据库的用户名密码!~ -->
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>

        <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
        <property name="acquireIncrement">5</property>
        <!-- 初始化数据库连接池时连接的数量 -->
        <property name="initialPoolSize">5</property>
        <!-- 数据库连接池中的最小的数据库连接数 -->
        <property name="minPoolSize">5</property>
        <!-- 数据库连接池中的最大的数据库连接数 -->
        <property name="maxPoolSize">10</property>

        <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
        <property name="maxStatements">20</property>
        <!-- 每个连接同时可以使用的 Statement 对象的个数 -->
        <property name="maxStatementsPerConnection">5</property>

    </named-config>

</c3p0-config>
 

数据库脚本文件也给上吧:

/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.5.24 : Database - test
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `test`;

/*Table structure for table `person` */

DROP TABLE IF EXISTS `person`;

CREATE TABLE `person` (
  `id` int(12) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `money` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `person` */

insert  into `person`(`id`,`name`,`money`) values (1,'zhang1',1001),(2,'zhang2',1002),(3,'zhang3',1003),(4,'zhang4',1004),(5,'tttttt',60000),(6,'aaass',12345);

/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40111 SET [email protected]_SQL_NOTES */;

导入所需要的jar文件:点击下载

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>jdbcutils_demo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

每一个都可以在方法里面用右键然后选择:JunitTest

就可以在控制台看到打印的信息了。是不是很好用,很喜欢!~快来试一试吧!转载请注明出处。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 17:12:04

数据库实用小工具之-DBUtils简单入门的相关文章

最火Python3 玩转实用小工具

第1章 课程介绍介绍课程的主要内容,课程内容安排.1-1 最火python3玩转实用小工具课程导学. 试看 第2章 自主研发-购书比价工具首先做好知识储备,讲解JSON.xpath.requests等用法以及字符串的高级用法.然后结合所学知识逐步分析当当.淘宝.京东.1号店的数据结构,实现数据爬取,再对数据进行整合,排序,实现效果.最后对代码进行review,引入一道面试题,深入讲解python对象相关知识点....2-1 课程概要及环境搭建 试看2-2 json知识点学习 试看2-3 xpat

ANDROID开发实用小工具

分享一些 Android开发中的实用小工具,你有发现好工具吗? 来这里分享一下呗 一.find bugs 静态检查工具 http://findbugs.sourceforge.net/ FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析 详情请参考:http://baike.baidu.com/view/2367937.htm 二.内测宝 - 测试分发管理平台 国内功能最完

【Android】创建数据库的小工具

功能 方便将文本表格数据导入到数据库中去,从而避免手动去添加一条条的模拟数据. 使用方法 将文本表格放在恰当的位置,类似于: 文件位置:/assets/mock_table.csv: 文件内容: name#string, age#int, course#string xesam_1, 1, desc_A xesam_2, 2, desc_B xesam_3, 3, desc_C xesam_4, 4, desc_D xesam_5, 5, desc_E xesam_6, 6, desc_F xe

WPF实用小工具

Kaxaml 一款轻量级的Xaml代码编辑器,提供了可视的效果可以看到修改代码后的实时效果图.个人习惯于用它测试系统默认控件的行为和布局,小片段的xaml也可以拿到这个工具上测试效果.这款工具还提供了代码提示,颜色提取器和代码格式化等功能. Inkscape  这个工具是用来绘制矢量图的.WPF方面最有用的功能是把svg文件转换为xaml,具体操作为选择文件,然后另存为xaml就可以 3. Wpf  performance Suite  WPF性能测试工具

异步加载css 和 谷歌浏览器各实用小工具介绍

异步加载css资源 加开页面首屏显示速度使我们前端一直在追求的目标,而css资源在这些优化中同样也是不可或缺的. 一个网站可能有一部分css资源是必须的,他需要在页面渲染完之前就被加载完,并和html一起解析,这个暂时无法做手脚,但是我们可以把一些非关键的css进行异步化,也就是异步加载. 市面上有很多工具可以达到这个效果,比如loadCSS 这次要说的这个异步加载方式,其实也是loadCSS中所用到的,代码如下: <link rel="stylesheet" href=&quo

windows网络故障检测实用小工具!

一.Ping: 1.ping 1)ping 127.0.0.1(localhost) 2)ping  本机网卡IP 3)ping  网关 4)ping  目标ip 2.Ping命令的常用参数选项 ping IP -t 连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断. ping IP -l 3000 指定Ping命令中的数据长度为3000字节,而不是缺省的32字节. ping IP -n 执行特定次数的Ping命令. 提示:注意禁止ping手段. 二.telnet 用法: telne

小工具:截图&amp;简单图像处理

一.程序运行截图 二.获取屏幕截图的方法 首先知道我们可以通过Screen.PrimaryScreen.Bounds获取到当前整个屏幕,再利用Bitmap和Graphics就可以得到整个屏幕的图片了. Screen.PrimaryScreen.WorkingArea这个获得是不包含任务栏的屏幕       获取屏幕代码如下所示: 1 /// <summary> 2 /// 获取屏幕图片 3 /// </summary> 4 private void GetScreenImage()

《Python绝技:运用Python成为顶级黑客》 Python实用小工具

1.实现简单探测 使用socket模块,connect()方法建立与指定IP和端口的网络连接:revc(1024)方法将读取套接字中接下来的1024B数据 mport socket import sys socket.setdefaulttimeout(2) s=socket.socket() s.connect(('192.168.1.1',21)) ans=s.recv(1024) print(ans) 通过函数实现 通过def()关键字定义,示例中定义扫描FTP banner信息的函数:

MySQL数据库同步小工具(Java实现)

近期公司做个报表系统,为了报表系统中复杂的查询条件,不影响线上业务系统的使用,研究了一下MySQL数据库同步,下面用Java代码实现MySQL数据库同步,以便自己查阅! ? 数据库同步实现功能点: 1.支持跨服务器跨库的多线程同步 2.每张表的同步有日志记录 3.每次同步记录数可配置 源码和具体的使用细则,可以到下载源码及使用说明?. ? 一.数据同步核心代码 ? ? ? 二.数据库同步多线程实现 ? ? ? ? 三.配置文件及读取配置文件代码 配置文件内容为: 读取配置文件的Java类为: ?