`
ilrxx
  • 浏览: 64830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Apache的DBUtils

阅读更多
package com.test.dbutil;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

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 com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class UserDaoImpl implements UserDao  {
	
	public DataSource getDataSource(){
		String url = "jdbc:mysql://127.0.0.1:3306/testdbutils";
		MysqlDataSource ds = new MysqlDataSource();
		ds.setServerName("127.0.0.1");
//		ds.setDatabaseName("testdbutils");
		ds.setURL(url);
		ds.setUser("root");
		ds.setPassword("123456");
		ds.setCharacterEncoding("utf8");
		return ds;
	}
	
	public BeanListHandler<User> getBeanListHandler(){
		return new BeanListHandler<User>(User.class);
	}
	
	public BeanHandler<User> getBeanHandler(){
		return new BeanHandler<User>(User.class);
	}

	public void delete(int id) {
		QueryRunner runner = new QueryRunner(getDataSource());
		try {
			int affectedRows = runner.update("delete from user where id = ?",id);
			System.out.println("删除成功,影响的行数:"+affectedRows);
		} catch (SQLException e) {
			System.out.println("删除id为"+id+"的记录失败。错误为:"+e.getMessage());
		}
	}

	public void delete(User user) {
		delete(user.getId());
	}

	public List<User> getAllUsers() {
		QueryRunner runner = new QueryRunner(getDataSource());
		try {
			return runner.query("select * from user", getBeanListHandler());
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	public User getById(int id) {
		QueryRunner runner = new QueryRunner(getDataSource());
		User user = null;
		try {
			user = runner.query("select * from user where id = ?", getBeanHandler(),id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return user;
	}

	public void save(User user) {
		QueryRunner runner = new QueryRunner(getDataSource());
		try {
			runner.update("insert into user values(?,?,?,?,?)",new Object[]{
					user.getId(),
					user.getName(),
					user.getAge(),
					user.getSex(),
					user.getBirth()
			});
		} catch (SQLException e) {
			System.out.println("插入失败,失败原因:"+e.getMessage());
		}
	}

	public long getCount() {
		QueryRunner runner = new QueryRunner(getDataSource());
		try {
			
			
			Long count = runner.query("select count(*) as count from user", new ResultSetHandler<Long>(){

				public Long handle(ResultSet rs) throws SQLException {
					if(rs.next()){
						return rs.getLong(1); //或者rs.getLong("count");
					}
					return 0L;
				}
				
			});
			
			//或者用ScalarHandler, 这里的new ScalarHandler() 可以加上“count”参数
//			Long count = (Long)runner.query("select count(*) as count from user",new  ScalarHandler(){
//
//				@Override
//				public Object handle(ResultSet rs) throws SQLException {
//					return super.handle(rs);
//				}
//				
//			});

			return (Long)count;
		} catch (SQLException e) {
			e.printStackTrace();
			return 0L;
		}
	}
	
	
	
}

 如果什么框架都不想用,那就最基础的jdbc吧,简单封装下。

分享到:
评论
26 楼 aunox 2011-05-30  
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。

---------------------------------------------------------------------------------------
N年前的老系统,还能只是修改一下SQL就可以了?我表示怀疑。
25 楼 caoyangx 2011-05-26  
yin_bp 写道
caoyangx 写道
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。

你就直接说是IBatis得了,把SQL写在XML中,并且掺杂着逻辑标签,你觉得很爽吗?你觉得DBA喜欢看这些XML标签偶尔出现些SQL关键字的内容吗?


其实把sql语句放到xml文件的不止ibatis吧,国内的bbossgroups中的持久层框架也可以把sql语句放到xml文件中,还支持热加载,改了后立马生效,不用重启应用,详细的情况可以参考文章《bbossgroups 开发系列文章之-最佳实践 》:
http://www.iteye.com/wiki/bbossgroups/3092-mvc-bboss-config
中的章节:数据库访问组件及sql语句配置文件和章节:dao组件管理及注入数据库访问组件

典型的配置如下:
<?xml version="1.0" encoding="UTF-8"?>

<properties>
	<property name="getRequesterDaoListInfo">
		<![CDATA[
			select r.*, o.ORG_NAME as service_requester_org_name from TD_ESB_REQUESTER r left join TD_SM_ORGANIZATION o 
			 on r.SERVICE_REQUESTER_ORG = o.ORG_ID
			 where 1=1
			#if($service_requester_code && !$service_requester_code.equals(""))
			 and SERVICE_REQUESTER_CODE = #[service_requester_code]
			#end
			#if($service_requester_account && !$service_requester_account.equals(""))
			 and SERVICE_REQUESTER_ACCOUNT like #[service_requester_account]
			#end
			#if($service_requester_name && !$service_requester_name.equals(""))
			 and SERVICE_REQUESTER_NAME like #[service_requester_name]
			#end
			#if($service_requester_org && !$service_requester_org.equals(""))
			 and SERVICE_REQUESTER_ORG = #[service_requester_org]
			#end
			
			order by create_time desc
		]]>
	</property>
	<property name="delete">
		<![CDATA[
			delete from TD_ESB_REQUESTER where SERVICE_REQUESTER_ID = ?
		]]>
	</property>
	<property name="findObjectById">
		<![CDATA[
			select r.*, o.ORG_NAME as service_requester_org_name from TD_ESB_REQUESTER r left join TD_SM_ORGANIZATION o 
			 on r.SERVICE_REQUESTER_ORG = o.ORG_ID where SERVICE_REQUESTER_ID = ?
		]]>
	</property>
	<property name="insert">
		<![CDATA[
			insert into TD_ESB_REQUESTER(ADDRESS ,BUSINESS_LINE_CODE ,CONTACT ,CREATE_TIME ,CREATOR ,EMAIL ,MODIFIER ,MODIFY_TIME ,PHONE ,SERVICE_REQUESTER_ACCOUNT ,SERVICE_REQUESTER_DESP ,SERVICE_REQUESTER_ID ,SERVICE_REQUESTER_NAME ,SERVICE_REQUESTER_ORG ,SERVICE_REQUESTER_PASSWORD ,USED_FLAG) values(#[address] ,#[business_line_code] ,#[contact] ,#[create_time] ,#[creator] ,#[email] ,#[modifier] ,#[modify_time] ,#[phone] ,#[service_requester_account] ,#[service_requester_desp] ,#[service_requester_id] ,#[service_requester_name] ,#[service_requester_org] ,#[service_requester_password] ,#[used_flag])
		]]>
	</property>
	<property name="update">
		<![CDATA[
			update TD_ESB_REQUESTER set ADDRESS=#[address] ,BUSINESS_LINE_CODE=#[business_line_code] ,CONTACT=#[contact] ,EMAIL=#[email] ,MODIFIER=#[modifier] ,MODIFY_TIME=#[modify_time] ,PHONE=#[phone] ,SERVICE_REQUESTER_ACCOUNT=#[service_requester_account] ,SERVICE_REQUESTER_DESP=#[service_requester_desp] ,SERVICE_REQUESTER_ID=#[service_requester_id] ,SERVICE_REQUESTER_NAME=#[service_requester_name] ,SERVICE_REQUESTER_ORG=#[service_requester_org] ,SERVICE_REQUESTER_PASSWORD=#[service_requester_password] where SERVICE_REQUESTER_ID = #[service_requester_id]
		]]>
	</property>
	<property name="updateFlag">
		<![CDATA[
			update TD_ESB_REQUESTER set USED_FLAG = #[used_flag], Modifier = #[modifier], Modify_time = #[modify_time] 
			where SERVICE_REQUESTER_ID = #[service_requester_id]
		]]>
	</property>	
	
</properties>



DBA观此XML后笑而不语。
24 楼 yangguo 2011-05-25  
piziwang 写道
确实是的,我们公司现在已经放弃使用什么 iBatis, Hibernate 了;
简单高效就是最好的, 我们全部使用最底层的JDBC,外加一个数据库连接池组件而已。

发现,越是使用一些高集成的东西,我们会变得越笨,到最后连 Class.forName(); DriverManager.getConnection() 最基本的数据库连接都不会了。 那时就悲哀了。呵呵~~


你用java也是高集成的,你去搞汇编,机器码吧
23 楼 ilrxx 2011-05-25  
二十一 写道
QueryRunner 是线程安全的,没必要每个数据库操作方法里都new一个。完全可以共用。

可以静态初始化下
22 楼 二十一 2011-05-25  
QueryRunner 是线程安全的,没必要每个数据库操作方法里都new一个。完全可以共用。
21 楼 yin_bp 2011-05-25  
dsjt 写道
common DBUtil 很轻巧,比JDBC省事,
感觉比 spring 封装的JDBC 更舒服一些,

bboss jdbc也非常省事啊
20 楼 captmjc 2011-05-25  
个人喜欢用xml。不是说xml就一定好,或者该sql一定可以不用改java。同时我也很不喜欢(早期的)hibernate那种方式。

另外,上面说的几年后的维护,我想,如果是“维护”的话应该不会涉及到大的变更,只是小修小补而已,往往只是加个查询条件,或者多个显示项目,排序条件而已。能只改SQL,JSP,不动java,自然是最好的。对于我现在做的大部分应用来说,99%的情况,真的可以只改sql/jsp。

框架是自己封装的(也顺便用到了dbutils),支持ORM。平时从来不需要按照查询条件拼接where。支持${xxx.y[0].zzz}占位符,当[ AND x =xx.xxx ]不存在的时候,自动略过。

BTW,项目并发不高,人员很少(往往1个人),因此,开发效率>运行效率。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>
	<entry key="incomemonth">
		<![CDATA[
SELECT SUM(price * quantity) AS nextIncome,
       DAYOFMONTH(date) AS date,
       storeId
  FROM t_sale
 WHERE delFlag = 0
 [ AND year(date) = :year ]
 [ AND month(date) = :month ]
 GROUP BY date, storeId
]]>
	</entry>
	<entry key="expensemonth">
		<![CDATA[
SELECT SUM(amount) AS nextExpense,
       DAYOFMONTH(date) AS date,
       storeId
  FROM t_expense
 WHERE delFlag = 0
 [ AND year(date) = :year ]
 [ AND month(date) = :month ]
 GROUP BY date, storeId
]]>
	</entry>

	<entry key="incomeyear">
		<![CDATA[
SELECT SUM(price * quantity) AS nextIncome,
       month(date) AS date,
       storeId
  FROM t_sale
 WHERE delFlag = 0
 [ AND year(date) = :year ]
 [ AND month(date) = :month ]
 GROUP BY date, storeId
]]>
	</entry>
	<entry key="expenseyear">
		<![CDATA[
SELECT SUM(amount) AS nextExpense,
       month(date) AS date,
       storeId
  FROM t_expense
 WHERE delFlag = 0
 [ AND year(date) = :year ]
 [ AND month(date) = :month ]
 GROUP BY date, storeId
]]>
	</entry>
	<entry key="stores">
		<![CDATA[
SELECT *
  FROM m_config
 WHERE delFlag = 0
   AND category = '1'
 [ AND id = :storeId ]
 ORDER BY id
]]>
	</entry>
</properties>
19 楼 dsjt 2011-05-25  
common DBUtil 很轻巧,比JDBC省事,
感觉比 spring 封装的JDBC 更舒服一些,
18 楼 xcrn75416 2011-05-25  
个人感觉,数据操作频繁的情况把sql放到框架的xml里统一配置挺好,开始麻烦,越往后越觉得方便……
17 楼 ilrxx 2011-05-25  
swanky_yao 写道
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
这个是??恕寡闻

这个是mysql的jdbc包中的一个类,我用的是mysql-connector-java-3.1.12-bin.jar
16 楼 swanky_yao 2011-05-25  
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
这个是??恕寡闻
15 楼 nakupanda 2011-05-25  
有好有不好吧,现在都喜欢快速,啥注解都用上,那又为何反对将SQL写到代码里去
14 楼 yin_bp 2011-05-25  
caoyangx 写道
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。

你就直接说是IBatis得了,把SQL写在XML中,并且掺杂着逻辑标签,你觉得很爽吗?你觉得DBA喜欢看这些XML标签偶尔出现些SQL关键字的内容吗?


其实把sql语句放到xml文件的不止ibatis吧,国内的bbossgroups中的持久层框架也可以把sql语句放到xml文件中,还支持热加载,改了后立马生效,不用重启应用,详细的情况可以参考文章《bbossgroups 开发系列文章之-最佳实践 》:
http://www.iteye.com/wiki/bbossgroups/3092-mvc-bboss-config
中的章节:数据库访问组件及sql语句配置文件和章节:dao组件管理及注入数据库访问组件

典型的配置如下:
<?xml version="1.0" encoding="UTF-8"?>

<properties>
	<property name="getRequesterDaoListInfo">
		<![CDATA[
			select r.*, o.ORG_NAME as service_requester_org_name from TD_ESB_REQUESTER r left join TD_SM_ORGANIZATION o 
			 on r.SERVICE_REQUESTER_ORG = o.ORG_ID
			 where 1=1
			#if($service_requester_code && !$service_requester_code.equals(""))
			 and SERVICE_REQUESTER_CODE = #[service_requester_code]
			#end
			#if($service_requester_account && !$service_requester_account.equals(""))
			 and SERVICE_REQUESTER_ACCOUNT like #[service_requester_account]
			#end
			#if($service_requester_name && !$service_requester_name.equals(""))
			 and SERVICE_REQUESTER_NAME like #[service_requester_name]
			#end
			#if($service_requester_org && !$service_requester_org.equals(""))
			 and SERVICE_REQUESTER_ORG = #[service_requester_org]
			#end
			
			order by create_time desc
		]]>
	</property>
	<property name="delete">
		<![CDATA[
			delete from TD_ESB_REQUESTER where SERVICE_REQUESTER_ID = ?
		]]>
	</property>
	<property name="findObjectById">
		<![CDATA[
			select r.*, o.ORG_NAME as service_requester_org_name from TD_ESB_REQUESTER r left join TD_SM_ORGANIZATION o 
			 on r.SERVICE_REQUESTER_ORG = o.ORG_ID where SERVICE_REQUESTER_ID = ?
		]]>
	</property>
	<property name="insert">
		<![CDATA[
			insert into TD_ESB_REQUESTER(ADDRESS ,BUSINESS_LINE_CODE ,CONTACT ,CREATE_TIME ,CREATOR ,EMAIL ,MODIFIER ,MODIFY_TIME ,PHONE ,SERVICE_REQUESTER_ACCOUNT ,SERVICE_REQUESTER_DESP ,SERVICE_REQUESTER_ID ,SERVICE_REQUESTER_NAME ,SERVICE_REQUESTER_ORG ,SERVICE_REQUESTER_PASSWORD ,USED_FLAG) values(#[address] ,#[business_line_code] ,#[contact] ,#[create_time] ,#[creator] ,#[email] ,#[modifier] ,#[modify_time] ,#[phone] ,#[service_requester_account] ,#[service_requester_desp] ,#[service_requester_id] ,#[service_requester_name] ,#[service_requester_org] ,#[service_requester_password] ,#[used_flag])
		]]>
	</property>
	<property name="update">
		<![CDATA[
			update TD_ESB_REQUESTER set ADDRESS=#[address] ,BUSINESS_LINE_CODE=#[business_line_code] ,CONTACT=#[contact] ,EMAIL=#[email] ,MODIFIER=#[modifier] ,MODIFY_TIME=#[modify_time] ,PHONE=#[phone] ,SERVICE_REQUESTER_ACCOUNT=#[service_requester_account] ,SERVICE_REQUESTER_DESP=#[service_requester_desp] ,SERVICE_REQUESTER_ID=#[service_requester_id] ,SERVICE_REQUESTER_NAME=#[service_requester_name] ,SERVICE_REQUESTER_ORG=#[service_requester_org] ,SERVICE_REQUESTER_PASSWORD=#[service_requester_password] where SERVICE_REQUESTER_ID = #[service_requester_id]
		]]>
	</property>
	<property name="updateFlag">
		<![CDATA[
			update TD_ESB_REQUESTER set USED_FLAG = #[used_flag], Modifier = #[modifier], Modify_time = #[modify_time] 
			where SERVICE_REQUESTER_ID = #[service_requester_id]
		]]>
	</property>	
	
</properties>
13 楼 抛出异常的爱 2011-05-25  
dwbin 写道
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。


实际上,把sql放在xml里面才费事,如果是一个不熟悉的人员来维护,需要先找到sql的别名,然后再到xml里面去改,我宁肯写成常量,或者直接写在代码里面

mybatis也支持代码生成SQL
12 楼 liushihua71632 2011-05-25  
用dbutils一年多的飘过
11 楼 tcray 2011-05-25  
多少写点干啥用 优缺点 啥的啊
10 楼 piziwang 2011-05-25  
确实是的,我们公司现在已经放弃使用什么 iBatis, Hibernate 了;
简单高效就是最好的, 我们全部使用最底层的JDBC,外加一个数据库连接池组件而已。

发现,越是使用一些高集成的东西,我们会变得越笨,到最后连 Class.forName(); DriverManager.getConnection() 最基本的数据库连接都不会了。 那时就悲哀了。呵呵~~
9 楼 dwbin 2011-05-25  
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。


实际上,把sql放在xml里面才费事,如果是一个不熟悉的人员来维护,需要先找到sql的别名,然后再到xml里面去改,我宁肯写成常量,或者直接写在代码里面
8 楼 yonghong915 2011-05-25  
项目中Ibatis,Hibernate用得多些,单独JDBC没怎么用。
7 楼 caoyangx 2011-05-25  
george_space 写道
直接把SQL写在程序中,这样不太好吧,如果有n年前的系统,当初的开发者都消失了。
现在需要改一条SQL语句,还需要重新修改、编译这个老项目啊?

可以考虑把SQL语句提取出来,放到xml中,这样可以集中管理SQL,即使换数据库,也不同动程序,只要修改一下xml中的SQL即可。

你就直接说是IBatis得了,把SQL写在XML中,并且掺杂着逻辑标签,你觉得很爽吗?你觉得DBA喜欢看这些XML标签偶尔出现些SQL关键字的内容吗?

相关推荐

    apache dbutils中文说明

    DBUtils的核心类包括`org.apache.commons.dbutils.DbUtils`、`org.apache.commons.dbutils.QueryRunner`以及一个接口`org.apache.commons.dbutils.ResultSetHandler`。下面我们将详细探讨这些类和接口的功能。 1. `...

    Apache DBUtils使用总结

    Apache DBUtils 是一个轻量级的 Java 数据库连接(JDBC)工具,它提供了一些实用功能,简化了数据库操作。DBUtils 最主要的功能是对 JDBC 结果集进行封装,能够将查询结果直接转换为 JavaBean 对象,从而减轻开发...

    采用Apache dbutils操作数据库

    Apache DBUtils是一个基于Java的开源库,它提供了一种简单且有效的处理数据库连接的方法,减少了在应用程序中编写数据库操作代码的复杂性。DBUtils的主要设计目标是简化数据库访问,通过提供一套实用工具来处理常见...

    Apache DbUtils Demo示例

    Apache DbUtils是一个由Apache软件基金会开发的开源Java库,它主要设计用于简化JDBC(Java Database Connectivity)操作。DbUtils库提供了一套实用工具方法,能够帮助开发者更高效、更安全地执行数据库操作,避免了...

    Apache DbUtils 1.5 API下载

    这个是Apache DbUtils 1.5 API,是我根据官方的制作的

    基于Spring MVC与Apache Dbutils整合的图形化模板定制一键生成代码及Spring配置文件设计源码

    该项目是一款基于Spring MVC框架和Apache Dbutils集成的图形化模板定制工具,旨在实现一键化自动生成Model、DAO、Service代码及Spring Web配置文件。该工具采用Freemarker模板语言进行代码生成,支持事务控制,并...

    apache dbutils ..............................

    Apache DBUtils是一个开源的Java库,它为数据库操作提供了一个简单且有效的工具集。这个库是基于Apache Commons项目的一部分,旨在简化Java应用程序与数据库之间的交互。DBUtils的主要目标是通过处理许多常见的...

    Apache Dbutils +springmvc 框架demo代码

    commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。 springmvc与springmvc 整合demo

    springmvc、SpringBoot与Apache Dbutils 项目代码骨架生成工具x64 Jar

    基于springmvc 、SpringBoot与apache dbutils整合的SWT、JFACE实现自动生成 model、dao、service代码 以及配置文件,并实现了事务。此工具源码请关注https://gitee.com/00fly/springmvc_dbutils_plus

    SpringBoot、Apache Dbutils、MybatisPlus、JPA等技术项目代码生成工具x64 Jar

    Springmvc、Apache Dbutils、SpringBoot、Mybatis、MybatisPlus、SpringDataJPA等技术项目代码生成工具,此工具源码请关注https://gitee.com/00fly/javacode-all-in-one

    Apache Dbutils JDBC 框架demo代码

    commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司...

    apache dbutils 框架

    Apache DBUtils是一个轻量级的Java数据库连接工具框架,它为开发者提供了简洁、高效且可靠的数据库操作API。DBUtils的主要目标是简化Java应用程序中的数据库访问,通过减少代码量和异常处理,让开发者能够更加专注于...

    Apache Commons DbUtils 1.6 API

    Apache Commons DbUtils 1.6 API 是一个Java库,它为数据库操作提供了简化的、异常安全的工具。这个API设计的目的是为了简化JDBC(Java Database Connectivity)编程,减轻开发人员处理数据库连接、事务和结果集时的...

    04-Apache-DBUtils驱动.rar

    Apache DBUtils是一个开源的Java库,它为Java应用程序提供了简单且有效的数据库连接管理。这个工具包简化了JDBC(Java Database Connectivity)的使用,通过提供一个健壮且易于使用的抽象层,使得数据库操作变得更加...

    Apache DBUtils

    Apache DBCP,工具亲测有效,=================================================================================

    apache 的 DbUtils1.6版的Html格式API 很全

    Apache DbUtils是Apache软件基金会开发的一个轻量级Java数据库操作工具库,主要目的是简化数据库的交互,使得开发者能够更高效地处理SQL操作。DbUtils 1.6版本是该库的一个较新版本,包含了丰富的API和功能,尤其...

    dbutils + oracle 增删改查批量插入示例

    首先,`dbutils`是Apache软件基金会提供的一个开源项目,它基于Java,提供了简单易用的API,使得开发者可以便捷地执行SQL语句,处理结果集,实现了对数据库的基本操作。它的核心组件包括QueryRunner和DBUtils,其中...

    apache commons dbutils api_zh

    apache commons dbutils api_zh

    Apache-DBUtils封装JDBC

    使用了Apache Commons DbUtils库中的类和方法封装JDBC,使用了org.apache.commons.dbutils.QueryRunner、org.apache.commons.dbutils.handlers.BeanHandler和org.apache.commons.dbutils.handlers.BeanListHandler等...

    模仿DBUtils(自己模仿DBUtils写的简易DBUtils)

    DBUtils是Apache Commons库中的一个组件,它提供了一套简单易用的数据库操作API,用于简化Java中的数据库访问。在本项目中,你将找到一个自己编写的简易DBUtils实现,虽然它不是Apache官方的DBUtils,但其设计思想和...

Global site tag (gtag.js) - Google Analytics