- 浏览: 5174350 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
用了好长一段时间JAVA,今天才知道有DBUtils这个东西。看了一下,使用方便,上手很快,是个不错的东西。
一、使用示例
二、自定义扩展
如果用户想要依照存入Map的顺序显示内容,好像不能直接支持。看了看源码,自定义了一个扩展类。用法在前的代码中有示例。
一、使用示例
package com.exam.test; import java.sql.Connection; import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import junit.framework.TestCase; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; 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 com.exam.db.DbManager; import com.exam.util.BasicRowProcessorEx; public class TestSomething extends TestCase { public void testDBUtilSelect() { Connection conn = DbManager.getInstance().getConnection(); QueryRunner queryRunner = new QueryRunner(); try { // 返回单行记录,使用Map System.out.println("使用Map处理单行记录!"); Map<String, Object> map = queryRunner.query(conn, "select * from tab where rownum=1", new MapHandler(), (Object[]) null); for (Iterator<Entry<String, Object>> i = map.entrySet().iterator(); i .hasNext();) { Entry<String, Object> e = i.next(); System.out.println(e.getKey() + "=" + e.getValue()); } System.out.println("处理多行记录!"); List<Map<String, Object>> list = queryRunner.query(conn, "select * from tab where rownum<=3", new MapListHandler(), (Object[]) null); for (Iterator<Map<String, Object>> li = list.iterator(); li .hasNext();) { System.out.println("--------------"); Map<String, Object> m = li.next(); for (Iterator<Entry<String, Object>> mi = m.entrySet() .iterator(); mi.hasNext();) { Entry<String, Object> e = mi.next(); System.out.println(e.getKey() + "=" + e.getValue()); } } System.out.println("使用Bean处理单行记录!"); // com.exam.test.TestSomething.Tab Tab tab = queryRunner.query(conn, "select tname from tab where rownum=1", new BeanHandler<Tab>(Tab.class)); System.out.println("tname=" + tab.getTname()); System.out.println("tabtype=" + tab.getTabtype()); System.out.println("使用Array处理单行记录!"); Object[] array = queryRunner.query(conn, "select * from tab where rownum=1", new ArrayHandler()); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } System.out.println("使用Array处理多行记录!"); List<Object[]> arraylist = queryRunner .query(conn, "select * from tab where rownum<=3", new ArrayListHandler()); for (Iterator<Object[]> itr = arraylist.iterator(); itr.hasNext();) { Object[] a = itr.next(); System.out.println("--------------"); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } System.out.println("使用ColumnListHandler处理单行记录,返回其中指定的一列!"); List<Object> colList = queryRunner.query(conn, "select * from tab where rownum=1", new ColumnListHandler( "tname")); for (Iterator<Object> itr = colList.iterator(); itr.hasNext();) { System.out.println(itr.next()); } System.out .println("使用ScalarHandler处理单行记录,只返回结果集第一行中的指定字段,如未指定字段,则返回第一个字段!"); Object scalar1 = queryRunner.query(conn, "select * from tab", new ScalarHandler("tname")); System.out.println(scalar1); Object scalar2 = queryRunner.query(conn, "select tname,tabtype from tab", new ScalarHandler()); System.out.println(scalar2); // 使用自定义的行处理器 // Map中的KEY可按输入顺序输出 System.out.println("使用Map处理单行记录(使用自定义行处理器)!"); Map<String, Object> linkedmap = queryRunner .query( conn, "select tabtype,tname,'wallimn' as programmer from tab where rownum=1", new MapHandler(new BasicRowProcessorEx()), (Object[]) null); for (Iterator<Entry<String, Object>> i = linkedmap.entrySet() .iterator(); i.hasNext();) { Entry<String, Object> e = i.next(); System.out.println(e.getKey() + "=" + e.getValue()); } // 使用自定义的行处理器 // Map中的KEY可按输入顺序输出 System.out.println("处理多行记录(使用自定义行处理器)!"); List<Map<String, Object>> listLinedMap = queryRunner .query( conn, "select tabtype,tname,'wallimn' as programmer from tab where rownum<=3", new MapListHandler(new BasicRowProcessorEx()), (Object[]) null); for (Iterator<Map<String, Object>> li = listLinedMap.iterator(); li .hasNext();) { System.out.println("--------------"); Map<String, Object> m = li.next(); for (Iterator<Entry<String, Object>> mi = m.entrySet() .iterator(); mi.hasNext();) { Entry<String, Object> e = mi.next(); System.out.println(e.getKey() + "=" + e.getValue()); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } DbUtils.closeQuietly(conn); } public void testDBUtilInsertDeleteUpdateSelect() { // 建一个简单的测试表,建表脚本如下 // create table T_DBUTILTEST( // id integer, // name varchar2(255) // ); Connection conn = DbManager.getInstance().getConnection(); QueryRunner queryRunner = new QueryRunner(true); try { queryRunner.update(conn, "delete from T_DBUTILTEST"); // queryRunner.update(conn, "truncate table T_DBUTILTEST"); // 插一条 for (int i = 0; i < 10; i++) { queryRunner.update(conn, "insert into T_DBUTILTEST (id,name) values (?,?)", i, "http://wallimn.iteye.com"); } // 再插多条 queryRunner.batch(conn, "insert into T_DBUTILTEST (id,name) values (?,?)", new Object[][] { { 11, "batch:wallimn@sohu.com" }, { 12, "batch:wallimn@sohu.com" } }); // 删除示例 queryRunner.update(conn, "delete from T_DBUTILTEST where id=1"); queryRunner.update(conn, "delete from T_DBUTILTEST where id=?", 2); queryRunner.batch(conn, "delete from T_DBUTILTEST where id=?", new Object[][] { { 3 }, { 4 } }); // 修改示例 queryRunner.update(conn, "update T_DBUTILTEST set name = ? where id=?", "修改后的新值", 5); System.out.println("最终结果显示结果"); List<Map<String, Object>> list = queryRunner.query(conn, "select name,id from T_DBUTILTEST", new MapListHandler(), (Object[]) null); for (Iterator<Map<String, Object>> li = list.iterator(); li .hasNext();) { System.out.println("--------------"); Map<String, Object> m = li.next(); for (Iterator<Entry<String, Object>> mi = m.entrySet() .iterator(); mi.hasNext();) { Entry<String, Object> e = mi.next(); System.out.print(e.getValue()); System.out.print(","); } System.out.println(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } DbUtils.closeQuietly(conn); } }
二、自定义扩展
如果用户想要依照存入Map的顺序显示内容,好像不能直接支持。看了看源码,自定义了一个扩展类。用法在前的代码中有示例。
package com.exam.util; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.dbutils.BasicRowProcessor; /** * 用于apache的dbutil类的功能改进,当需要Map中的Key能按输入的顺序输出时,使用这个类来进行处理。简单改了一下基类。<br/> * 编码:wallimn 时间:2012-7-25 上午11:07:06<br/> * 版本:V1.0<br/> */ public class BasicRowProcessorEx extends BasicRowProcessor { private static class CaseInsensitiveLinkedHashMap extends HashMap<String, Object> { private final Map<String, String> lowerCaseMap = new LinkedHashMap<String, String>(); private static final long serialVersionUID = -2848100435296897392L; /** {@inheritDoc} */ @Override public boolean containsKey(Object key) { Object realKey = lowerCaseMap.get(key.toString().toLowerCase()); return super.containsKey(realKey); } /** {@inheritDoc} */ @Override public Object get(Object key) { Object realKey = lowerCaseMap.get(key.toString().toLowerCase()); return super.get(realKey); } /** {@inheritDoc} */ @Override public Object put(String key, Object value) { Object oldKey = lowerCaseMap.put(key.toLowerCase(), key); Object oldValue = super.remove(oldKey); super.put(key, value); return oldValue; } /** {@inheritDoc} */ @Override public void putAll(Map<? extends String, ?> m) { for (Map.Entry<? extends String, ?> entry : m.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); this.put(key, value); } } /** {@inheritDoc} */ @Override public Object remove(Object key) { Object realKey = lowerCaseMap.remove(key.toString().toLowerCase()); return super.remove(realKey); } } @Override public Map<String, Object> toMap(ResultSet rs) throws SQLException { Map<String, Object> result = new CaseInsensitiveLinkedHashMap(); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); for (int i = 1; i <= cols; i++) { result.put(rsmd.getColumnName(i), rs.getObject(i)); } return result; } }
评论
16 楼
lgh1992314
2017-06-09
class DbUtil { private static String url = "jdbc:mysql:///test?useUnicode=true&characterEncoding=UTF-8&useSSL=true"; private static String username = "root"; private static String password = "lgh123"; public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
15 楼
wallimn
2015-08-06
“
已存在的db文件是什么意思?
killpigman 写道
请问Dbutils 怎样操作 已存在的db 文件?
已存在的db文件是什么意思?
14 楼
killpigman
2015-08-04
请问Dbutils 怎样操作 已存在的db 文件?
13 楼
wallimn
2015-04-06
说不定 jdbctemplate 是DBUtil的翻版。
12 楼
穿围裙的程序员
2015-04-03
这不就是spring jdbctemplate 的翻版么?
11 楼
di1984HIT
2015-02-27
写的很好,谢谢啦
10 楼
wallimn
2014-12-04
就是用JDBC或者从连接池中获取连接,是个通用的方法,因此代码里没有写。
9 楼
yexiongMYBH
2014-12-04
兄弟,你这个DBManager是在哪里写的呢?比较好奇你是怎样去得到数据库的connection的。
8 楼
wallimn
2013-09-12
呵呵,项目可能没有真正的负责人。
7 楼
freezingsky
2013-09-12
刚到公司看了一下,之前公司的一些产品,里面在数据层的操作花样很多,项目是用spring+struts1+hibernate建立 的,看代码里面又有hiberante又有jdbctemple又有dbutils,我都 无语了。。。
6 楼
wang85lin
2013-06-13
感谢,学习了。
5 楼
evanzzy
2012-07-27
Spring有好几个组件,JdbcTemplate是其中的一个,需要和Spring结合使用,比DbUtils功能强,效率相同。
4 楼
wallimn
2012-07-26
一直没有用过Spring,你说的那个可以单独用吗?
3 楼
evanzzy
2012-07-26
lz可以试试Spring的JdbcTemplate,比这个更省事儿
2 楼
surpass_li
2012-07-26
太好了,学习到新东西了,DBuinit还这些功能,谢谢
1 楼
ddrisme
2012-07-26
mark it
.good
.good
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18628编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2462部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3455两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 18181.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7680一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1274我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3268做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1175写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3993大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2381一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7524我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2759@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2089转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3084用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1768element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9798示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6641申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5329最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5296springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10418微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。 DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 应用实践小结: 一、...
在实际应用中,一个典型的使用示例可能是这样的: ```java // 导入所需的包 import org.apache.commons.dbutils.*; // 加载 JDBC 驱动 DbUtils.loadDriver("com.mysql.jdbc.Driver"); // 创建 QueryRunner 实例 ...
在本示例中,我们将会探讨如何使用DbUtils进行数据库的连接、查询、更新、插入和删除操作。 1. **连接管理** DbUtils提供了一个`DbUtils`静态类,包含了一系列关于数据库连接的管理方法。例如,`connect(String ...
# 使用示例 db = MyDatabase() conn = db.get_connection() cursor = conn.cursor() cursor.execute("SELECT * FROM mytable") rows = cursor.fetchall() ``` 在以上代码中,`PooledDB` 创建了一个连接池,每次需要...
本示例着重介绍如何结合`dbutils`与Oracle数据库进行高效的数据处理。 首先,`dbutils`是Apache软件基金会提供的一个开源项目,它基于Java,提供了简单易用的API,使得开发者可以便捷地执行SQL语句,处理结果集,...
以下是一个简单的示例,展示了如何使用 DBUtils 进行数据库操作: ```java import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons....
在"SQLiteDemo"这个文件中,可能包含了一个演示如何使用DBUtils与SQLite数据库交互的示例。通常,这样的示例会包括以下步骤: 1. 加载SQLite JDBC驱动,并创建数据库连接。 2. 使用DBUtils的QueryRunner实例执行SQL...
以下是一个简单的DBUtils使用示例,展示如何执行一个查询并处理结果: ```java import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons....
三、DBUtils的使用示例 1. 获取数据库连接: ```java BasicDataSource ds = new BasicDataSource(); ds.setUrl("jdbc:mysql://localhost:3306/test"); ds.setUsername("root"); ds.setPassword("password"); ...
本篇文章将深入探讨`dbutils` API的核心概念、主要功能以及使用方法。 ### 1. 核心概念 - **文件系统操作**: `dbutils.fs` 命名空间提供了对分布式文件系统的访问,支持HDFS、S3等存储服务。通过这个API,可以进行...
以下是一个简单的示例,展示了如何在Java程序中使用C3P0和DBUtils: ```java import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons....
**使用示例** 以下是一个基本的使用`dbutils` 查询数据库的例子: ```java import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons....
接下来,我们看看"commons-dbutils的使用.pdf"这份文档,它会详细介绍DBUtils的API用法和最佳实践。文档通常会涵盖以下几个部分: 1. **基本使用**:介绍如何创建QueryRunner实例,以及如何执行简单的SQL查询和更新...
在Java编程中,尤其是在处理数据库操作时,Apache Commons DBUtils库是一个非常实用的工具,它简化了JDBC(Java Database Connectivity)的使用。DBUtils提供了一种更安全、更易于管理的方式来进行数据库交互,避免...
- **异常处理**: dbutils 使用了统一的异常处理机制,所有与数据库交互相关的异常都被封装为 `DbUtils.DbException`,简化了错误处理流程。 **2. 使用 dbutils 执行 SQL** 使用 dbutils,你可以按照以下步骤执行 ...
DbUtils是一个在Java开发中广泛使用的数据库操作工具库,它简化了JDBC(Java Database Connectivity)的使用,提供了更加简洁、易用的API接口。DbUtils由Apache软件基金会的Jakarta项目开发,属于Apache Commons系列...
**二、dbutils的使用示例** 1. **建立连接**: 首先需要配置JDBC驱动,并通过`DriverManager.getConnection()` 创建数据库连接。 2. **创建QueryRunner对象**: `QueryRunner runner = new QueryRunner(dataSource);...
首先,我们来详细了解一下`dbutils`库。它主要包含以下几个组件: 1. **PooledDB**: 这是dbutils的核心部分,实现了连接池的功能。它可以根据预设的参数动态地创建和管理数据库连接,比如设置最大连接数,最小连接...
**使用dbutils操作数据库入门** 在Java开发中,与数据库的交互是不可或缺的一部分。DBUtils(Database Utilities)是由Apache组织提供的一个开源工具包,它简化了数据库操作,使得开发者能够更加便捷地执行SQL语句...
这个项目提供了一个简单封装的DBUtils示例,方便快速进行Python数据库操作。请确保已安装`pymysql`库。 ## 使用步骤 1. 导入`MyDbUtils`模块。 2. 创建`DBUtil`对象。 3. 调用`execute_sql`方法执行SQL。 4. 使用...