apache dbutils的CURD(增,修改,查询,删除)例子代码

/**

*@DEMO:dbutils

*@Java:DoMain.java

*@Date:2015-1-15下午9:20:32

*@Author:liangjilong

*@Email:[email protected]

*@Weibo:http://weibo.com/jilongliang

*@Version:1.0

*@Description:

*/

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.      介绍

commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,

花几分钟的时间就能掌握它的使用。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2.      下载

进入apache官方网站的commons-dbutils网页:http://commons.apache.org/dbutils/

选择左边导航栏的Download进入下载页面:

Binary:是编译好的jar包;source是源代码包。下载一份Binary到本地。解开后如下图所示:

其中commons-dbutils-1.1.jar就是供使用的jar包;docs是这个组件的帮助文档。下面就通过示例介绍它的使用。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.      API介绍

commons-dbutils是一个非常小的类包, 无需花费太多时间去阅读它的doc,

核心只是两个类

org.apache.commons.dbutils.DbUtils、

org.apache.commons.dbutils.QueryRunner和一个接口org.apache.commons.dbutils.ResultSetHandler。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.1.    DbUtils类

DbUtils是一个用来做一些如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。

这个类里的重要方法有:

public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。

这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。

public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,

还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载CloseQuietly方法时,

特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),这是因为在大多数情况下,连接、声明

和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。使用这一方法,你最后的块就可以只需要调用这一方法即可。

public static void CommitAndCloseQuietly(Connection conn): 这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上

抛出在关闭时发生的一些SQL异常。

public static boolean loadDriver(java.lang.String driverClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回true。

使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.2.    QueryRunner类

这个类简单化了执行SQL查询,它与ResultSetHandler组合在一起使用就可能完成大部分的数据库操作,它能够大大减少你所的编码量。

QueryRunner类提供了两个构造方法:一个是默认的构造方法;另一个需要一个 javax.sql.DataSource 来作为参数。因此,在你不用为一个

方法提供一个数据库连接的情况下,提供给构造器的DataSource)被用来获得一个新的连接并将继续进行下去。

这个类中的重要方法包括以下这些:

public Object query(Connection conn, String sql, ResultSetHandler rsh, Object[] params) throws SQLException:执行一个查

询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法它会内在地处理PreparedStatement 和ResultSet 的创

建和关闭。最重要的是参数ResultSetHandler会把从 ResultSet中获得的数据转换成一个更容易的或是应用程序特定的格式供我们使用。

public Object query(String sql, ResultSetHandler rsh, Object[] params) throws SQLException: 这几乎与第一种方法一样;唯一的

不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。

public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。

public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。

public int update(Connection conn, String sql) throws SQLException:用来执行一个更新操作,不需要置换参数。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.3.    ResultSetHandler接口

正如它的名字所提示的,这一接口执行处理一个jaca.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集

(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java

类型之外,其它的返回类型并没有什么限制。。

common-dbutils组件包针对这个接口提供了九个实现类:

ArrayHandler:把结果集中的第一行数据转成对象数组。

ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。

BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

ColumnListHandler:将结果集中某一列的数据存放到List中。

KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。

MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object

如果这九个实现类中没有任何一个提供了你想要的服务,你可以自己写一个实现类。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.4.    其它类和接口

org.apache.commons.dbutils.QueryLoader类:属性文件加载器,主要用于加载属性文件中的SQL到内存中。

org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet类:这个类是用来对sql语句执行完成之后的的数值进行null的替换。

org.apache.commons.dbutils.wrappers.StringTrimmedResultSet类:  去除ResultSet中字段的左右空格。

org.apache.commons.dbutils.RowProcessor接口: 它提供了把结果集的行数据转换成其它格式的功能。

它的实现类是org.apache.commons.dbutils.BasicRowProcessor类。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

package ivyy.taobao.com.utils;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *@DEMO:dbutils
 *@Java:DBHelper.java
 *@Date:2015-1-15下午9:24:27
 *@Author:liangjilong
 *@Email:[email protected]
 *@Weibo:http://weibo.com/jilongliang
 *@Version:1.0
 *@Description:
 */
public class DBHelper {

	private static DBHelper instance = null;
	private static Connection conn = null;
	private static String Driver = "com.mysql.jdbc.Driver";// ConfigLoaderUtils.getProperty("jdbc.driver");
	private static String Url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";// ConfigLoaderUtils.getProperty("jdbc.url");
	private static String UserName = "root";// ConfigLoaderUtils.getProperty("jdbc.userName");
	private static String PassWord = "root";// ConfigLoaderUtils.getProperty("jdbc.passWord");

	/**建立单例模式
	 * Single
	 * @return
	 */
	public static DBHelper getInstance() {
		if (instance == null) {
			synchronized (DBHelper.class) {
				instance = new DBHelper();
			}
		}
		return instance;
	}
	/**
	 * @return
	 */
	public static Connection getConnection() {
		try {
			Class.forName(Driver);
			conn = DriverManager.getConnection(Url, UserName, PassWord);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
}
package ivyy.taobao.com.domain;

import ivyy.taobao.com.entity.User;
import ivyy.taobao.com.utils.DBHelper;
import ivyy.taobao.com.utils.DataUtil;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.DbUtils;
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.MapHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

/**
 *@DEMO:dbutils
 *@Java:DoMain.java
 *@Date:2015-1-15下午9:20:32
 *@Author:liangjilong
 *@Email:[email protected]
 *@Weibo:http://weibo.com/jilongliang
 *@Version:1.0
 *@Description:
 */
@SuppressWarnings("all")
public class DoMain {

	Connection  conn=null;

	/****
	 * 查询单条的是使用转换BeanHandler
	 */
	@Test
	public void testQueryById(){
		conn=DBHelper.getConnection();
		QueryRunner qr = new QueryRunner();
		String SQL="select * from user where id = ?";
		User u=null;
		try {
			u = (User) qr.query(conn, SQL, new BeanHandler(User.class),1);
			System.out.println(u.getId() + "\t" + u.getUsername() + "\t" + u.getCreateDate()+ "\t" + u.getModifyDate());
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/****
	 * 查询所有的是使用转换BeanListHandler
	 */
	@Test
	public void testQueryAll(){
		conn=DBHelper.getConnection();
		QueryRunner qr = new QueryRunner();
		String SQL="select * from user";
		List<User> list=null;
		try {
			list = (List) qr.query(conn, SQL, new BeanListHandler(User.class));
			for(User u:list){
				System.out.println(u.getId() + "\t" + u.getUsername() + "\t" + u.getCreateDate());
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/***
	 * 通过map的key去查询
	 * 跟jdbc的 java.sql.ResultSet rs=null
	 * rs.getString("key");一样的结果
	 */
	@Test
    public void testQueryByMapKey() {
		Integer id=1;//id=1查询
        conn = DBHelper.getConnection();
        QueryRunner qr = new QueryRunner();
        String date=DataUtil.getNowDate("yyyy-MM-dd HH:mm:ss");
        try {
    	    String Sql="update user set modifyDate ='"+date+"',username ='xiaoliang' where id ="+id;
            //先将两个字段置为null
            qr.update(conn, Sql);
            Map<String, Object> map = qr.query(conn, "SELECT * FROM user where id = ?", new MapHandler(), id);
            User u = new User();
            u.setId((Integer)map.get("id"));
            u.setUsername(map.get("username").toString());
            u.setModifyDate(map.get("modifyDate").toString());
            System.out.println(u.getId() + "\t" + u.getUsername() + "\t" + u.getModifyDate());
        } catch (SQLException e) {
                e.printStackTrace();
        }finally{
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	} 

	/****
	 * 添加
	 */
	@Test
	public void testSave() {
		Long id = null;
		conn = DBHelper.getConnection();
		String date=DataUtil.getNowDate("yyyy-MM-dd HH:mm:ss");
		String  sql = "INSERT INTO user (id,username, createDate,modifyDate,type) ";
				sql+="VALUES (null, 'liangjilong', '"+date+"','"+date+"','insert')";
		QueryRunner qr = new QueryRunner();
		try {
			int res=qr.update(conn, sql);
			// 获取新增记录的自增主键
			id = (Long) qr.query(conn, "SELECT LAST_INSERT_ID()",new ScalarHandler(1));//获取最后一条id数据
			System.out.println("更新"+res+"条数据"+"更插入的Id为"+id);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	} 

	/****
	 * 删除
	 */
	@Test
	public void testDelete() {
		Integer id=1;//拿到最后条Id就删除掉
		int res = -1;
		conn = DBHelper.getConnection();
		QueryRunner qr = new QueryRunner();
		try {
			//id=(Integer) qr.query(conn, "SELECT LAST_INSERT_ID()",new ScalarHandler(0));//获取最后一条id数据
			res = qr.update(conn, "DELETE FROM user WHERE id = ?", id);
			System.out.println("删除"+res+"条数据");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/****
	 * 修改
	 */
	@Test
	public void testUpdate() {
		Integer id=1;//id=1查询
        conn = DBHelper.getConnection();
        QueryRunner qr = new QueryRunner();
        String date=DataUtil.getNowDate("yyyy-MM-dd HH:mm:ss");
        try {
    	    String Sql="update user set modifyDate ='"+date+"',username ='liangjilong' where id ="+id;
            //先将两个字段置为null
            int result=qr.update(conn, Sql);
            System.out.println("更新"+result+"条数据");
        } catch (SQLException e) {
                e.printStackTrace();
        }finally{
			try {
				DbUtils.close(conn);
				//DbUtils.rollback(conn);//回滚
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	} 

}
package ivyy.taobao.com.entity;

import java.io.Serializable;

/**
 *@DEMO:dbutils
 *@Java:User.java
 *@Date:2015-1-15下午9:21:34
 *@Author:liangjilong
 *@Email:[email protected]
 *@Weibo:http://weibo.com/jilongliang
 *@Version:1.0
 *@Description:
 */
public class User implements Serializable{
	 private Integer id;

	 private String username;
	 private String password;

	 private String createDate;

	 private String modifyDate;

	public Integer getId() {
		return id;
	}

	public void setId(Integer 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 getCreateDate() {
		return createDate;
	}

	public void setCreateDate(String createDate) {
		this.createDate = createDate;
	}

	public String getModifyDate() {
		return modifyDate;
	}

	public void setModifyDate(String modifyDate) {
		this.modifyDate = modifyDate;
	}

}

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50528
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50528
File Encoding         : 65001

Date: 2015-01-15 22:32:12
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `createDate` datetime DEFAULT NULL,
  `modifyDate` varchar(255) DEFAULT NULL,
  `type` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'liangjilong', 'admin123', '2014-05-28 17:38:22', null, null);
INSERT INTO `user` VALUES ('2', 'liangjilong', 'admin123', '2014-05-28 17:38:22', null, null);
INSERT INTO `user` VALUES ('3', 'liangjilong', 'admin123', '2014-05-28 17:38:22', null, null);

代码https://github.com/jilongliang/dbutils

时间: 2024-10-11 18:27:35

apache dbutils的CURD(增,修改,查询,删除)例子代码的相关文章

学习Git的一点心得以及如何把本地修改、删除的代码上传到github中

一:学习Github的资料如下:https://git.oschina.net/progit/ 这是一个学习Git的中文网站,如果诸位能够静下心来阅读,不要求阅读太多,只需要阅读前三章,就可以掌握Git的常用命令. 二:学习Git中远程仓库的问题: Git的远程仓库:就是管理你代码的地方,这个是Github中提供的有,只要你在Github中注册一下你就可以获得无限个Git的远程仓库. 我的Github中的远程仓库如下图所示: 对远程仓库我首先理解为:在Gitbash中敲一个命令:Git init

[PHP] - Laravel - 列表、新增、修改、删除例子

前言 Laravel默认是自带了CURD的功能,使用路由的Route::resource可以做到. 但真正的项目中,这往往不是我们所需要的.因为一个项目会有比较复杂的计算.验证等功能. 下面是对项目中的列表.新增.修改.删除写了一个简单的view层的模型例子 一.路由配置 在app\Http\routes.php加入如下: Route::group(["prefix" => "my2"], function() { Route::controller(&quo

Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

http://www.jb51.net/article/42016.htm 初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例.写了一些基本的增删改查功能,算是对该控件的基本入门.后续有时间继续深入学习. 在学习jquery easyui前应该先到官网下载最新版本http://www.jeasyui.com/download/index.php 先看一下运行后的页面 1.列表展示 2.新

EasyUI中datagrid实现显示、增加、 删除、 修改、 查询操作(后台代码C#)

2datagrid加载数据.代码如下所示 一.数据的显示 1新建HtmlPage2.html页面,引入相关文件.如下所示 <script src="easyui/js/jquery-1.8.2.min.js"></script>  <script src="easyui/js/jquery.easyui.min.js"></script>  <link href="easyui/css/themes/d

接口测试用例设计指导文档:新建、查询、修改、删除、功能以及流程等用例设计

一.功能点测试用例(单个测试用例) 二.新建接口 三.查询接口&查询列表接口 四.修改接口&删除接口 五.流程测试用例(组合测试用例) 六.测试执行时,需注意的地方

百度地图:普通覆盖物,以及多边形覆盖物,及他们的描述信息的添加,修改,删除,查看功能,还有多边形根据名称查询功能;

版权所有,未经本人允许,禁止转载! 这个界面功能是,普通覆盖物,以及多边形覆盖物,及他们的描述信息的添加,修改,删除,查看功能,还有多边形根据名称查询功能: 由于这个界面的数据是存在数据库,还有后台代码,所以这个页面无法直接使用: <%@ page contentType="text/html;charset=UTF-8"%> <%@ include file="/WEB-INF/views/include/taglib.jsp"%> <

C#面向对象之数据库(理论、插入、修改、删除、查询)

1.数据库的作用:不仅仅是存储,更重要的是将数据进行存储以后怎么样才能方便快捷的查询修改 2.数据库的特点:海量存储.查找速度快.并发性问题控制.安全性.数据完整性(保存在数据库中的数据是正确的.真是的) 3.数据库管理软件:SQL Server Management System 数据库软件:SWL Server以服务的方式存在 数据库文件:itcast.mdf 管理软件向数据库服务发出指定,数据库服务指向到具体的数据库文件 4.SQL 是一种语言 结构化查询语言 SQL Server也是一种

Apache—DBUtils框架简介

转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernat

MySQL:创建、修改和删除表

其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语句,但是不是任何项目都要用到大框架的,如果不用,那你是不是就不会操作数据库了呢,所以我们最好还是熟悉一点好,对我们以后找工作和工作都有帮助. 在说创建.修改和删除表前,我们还是要进行一个操作的简单说明: 1.登陆数据库系统 在命令行中登陆MySQL数据库管理系统,输入一下内容: mysql -h l