- 浏览: 118163 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
darrendu:
如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用 ...
缺省适配器模式 -
cwalet:
显然这个错误是在使用struts标签时产生的,原因是没有在st ...
彻底解决 警告: No configuration found for the specified action -
jzinfo:
{} xtcpcgx 写道还是有点不明白,感觉缺省适配类跟接口 ...
缺省适配器模式 -
xtcpcgx:
还是有点不明白,感觉缺省适配类跟接口代码一模一样啊。
缺省适配器模式 -
googya:
这段代码的结果是,dopost根本没有执行?
servlet中service doGet doPost 的关系
JDBC码是Java译码的一个部分,它给已写的编码带来了数量惊人的重复。另外,JDBC码几乎会经常性的带来一些低级错误。写出好的JDBC编码并不难,但是很痛苦。
DbUtils组件是一个精密而简单的组件,它并不做什么复杂的事而仅仅只是使很多的JDBC任务对开发者来说变得稍容易一点。尽管这时候很多持久框架和包都可以用来使数据持久变得更容易,然而JDBC仍然是大多数Java和Java2企业版(J2EE)开发者赖以生存的工具。因此,任何能让使用JDBC工作更容易的东西都是好消息。
DbUtils可以免费下载,它不依赖于任何其它的通用组件而只是依赖下面这些:
- Java Development Kit (JDK) 1.2 (or later)
- JDBC 2.0 (or later)
DbUtils文档并不是最好的,但是足以使你的工作正常进行。在下一节,你会看到DbUtils中最有用的类以及一些关于它们的用法的例子。你应该能够很容易地使用这些编码和例子,然后能够马上在你自己的项目中开始使用DbUtils。我将会集中精力于两个类(org.apache.commons.dbutils.DbUtils 和org.apache.commons.dbutils.QueryRunner)和一个接口(org.apache.commons.dbutils.ResultSethandler).在我给你们一些关于它们的用法的例子之前,让我们深入DbUtils里面来仔细看看它给我们提供了些什么。
DbUtils
DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。
这个类里的重要方法有:
- close:DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
- CloseQuietly: CloseQuietly这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。使用这一方法,你最后的块就可以只需要调用这一方法即可。
- CommitAndCloseQuietly(Connection conn):这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
- LoadDriver(String driveClassName): 这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,你也就得到了一个很好的Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。
ResultSetHandler
正如它的名字所提示的,这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。
ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。
QreryRunner
这个类使执行SQL查询简单化了,它与ResultSetHandler串联在一起有效地履行着一些平常的任务,它能够大大减少你所要写的编码。QueryRunner类提供了两个构造器:其中一个是一个空构造器,另一个则拿一个 javax.sql.DataSource 来作为参数。因此,在你不用为一个方法提供一个数据库连接来作为参数的情况下,提供给构造器的数据源(DataSource) 被用来获得一个新的连接并将继续进行下去。
这一类中的重要方法包括以下这些:
- query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):这一方法执行一个选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭。ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。
- query(String sql, Object[] params, ResultSetHandler rsh):这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDAtaSource 方法中重新获得的。
- query(Connection conn, String sql, ResultSetHandler rsh):这执行一个不要参数的选择查询。
- update(Connection conn, String sql, Object[] params):这一方法被用来执行一个插入、更新或删除操作。对象阵列为声明保存着置换参数。
现在让我们来看一个例子,在这里你可以从一个数据库中获得一些数据。比如说,我正在使用MySQL 数据库.你还需要下载MYSQL JDBC驱动程序。我正在使用的MySQL数据库在本地主机,端口号为3306上运行。这个数据库地名字叫做test。你将要用到的Student表的结构如下:
Columns Type
------- ----
StudId int
Name varchar
在列表A中,你将会从Student表中得到一些信息,而且你可以按照你自己的额外需要修改这些信息。尽管你在使用JDBC,但要注意你几乎没写JDBC编码。(你可能要改变在例子中所规定的用户名和密码,这是以你的具体的数据库配置为基础的。)
这个编码遵从以下步骤:
1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接。
2.例示 QueryRunner 类。
3.使用连接、SQL查询、参数和ResultSetHandler来作为输入的查询方法。你使用一个类org.apache.commons.dbutils.handlers.MapListHandler,一个类 MapListHandler来获得一个结果集(ResultSet)并返回一个jaca.util.Map的实例java.util.List。因此结果集(ResultSet) 的每一行都变成了一个java.util.Map,所有这些java.util.Map的实例绑在一起放在一个java.util.List 中。
4. 反复得到列表(List)的值就是通过在列表(List)中获得每一个Map的值。
5.用QueryRunner 来执行一个没有参数的方法。在这里你要用BeanListHandler ,它是一个非常有用的ResultSetHandler ,因为你可以把ResultSet 转变成一个指定的Bean的列表中。这时你可以指定一个Bean类到Bean StudentBean中,如同在列表B中所显示的那样。
6. 你通过反复从列表(List)中得到多个bean,然后就可从每一个StudentBean实例中获取值。
注释:在列表B中,StudentBean 类中的StudId 必须是int,这是因为表Student的StudId列的类型是int。坚持这个类型的匹配是我们需要遵从的唯一规则。
因为在这种情况下,StudentBean 类的属性和表Student 的字段是完好的对映着的,只要将StuentBean 类作为一个参数就是一个技巧。字段值用和字段名一样的名字插入到类的属性中。然而,如果你想要更多地控制bean的创建,则类BeanListHandler提供了第二个构造器:BeanListHandler(java.lang.Class type, RowProcessor convert). 接口Rowprocessor的执行把结果集(ResultSet)的各行转化成一个对象组。在 StudentBean这一案例中,RowProcessor中的BasicRowProcessor 的执行被利用上了,它能够执行这项任务。然而,你可以写一个新的执行并把它提供给BeanListHandler的构造器。
当然,执行这一编码的输出取决于你从表Student中获得哪些数据。对我来说,我得到了以下这些输出:
***Using MapListHandler***
Id >>1
Name >>One
Id >>2
Name >>Two
***Using BeanListHandler***
Id >>1
Name >>One
Id >>2
Name >>Two
Id >>3
Name >>Three
除了到目前为止你已经看了的类以外,另外一些你需要研究的类是:
- org.apache.commons.dbutils.QueryLoader:QueryLoader是一个从一个文件加载查询到一个Map的简单的类。然后,当需要的时候,你从 Map 中选择一些查询。在没有专门去接触代码的情况下,一个文件中的Having查询也可以改变得尽可能的简单。
- org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet:这个类对使用一个系统方法来解决NULL值问题是很有用的。用一个 SqINullCheckedResultSet 的实例来限制一个常规的结果集(ResultSet) ,然后详细地说明在遇NULL值的情况下应该做些什么。
- org.apache.commons.dbutils.wrappers.StringTrimmedResultSet:用类StringTrimmedResultSet 来约束一个结果集,这样一来,你就可以修整所有getString()和getObject()方法返回的字符串。
DbUtils 组件很好也很小巧,很值得在所有用到JDBC的项目中去使用。
import java.util.*; public class TestDBUnits { ===============================================================
1.使用commons DButils组件对数据库进行查询。 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.print("Test AND I am so BORING!<br>"); request.setCharacterEncoding("utf-8"); Context context; try { context = new InitialContext(); DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/oracleds"); QueryRunner qr=new QueryRunner(ds); // String sql="select * from users"; String sql="select * from users where id=? and name=?"; MapListHandler handler=new MapListHandler(); String [] param={"2","meng"}; // List list=(List)qr.query(sql,handler); List list=(List)qr.query(sql,param,handler); for(int i=0;i<list.size();i++){ Map map=(Map)list.get(i); out.println(map.get("id")); out.println(map.get("name")); out.print("<br>"); } } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); } }
2.使用本组件对数据库进行数据管理。包括“增删改”。
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("Test Again!"); String sql="insert into users values(?,?) "; Context context; try { context = new InitialContext(); DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/oracleds"); QueryRunner qr=new QueryRunner(ds); // MapListHandler handler=new MapListHandler(); String [] params={"3","Zhang"}; int i=qr.update(sql, params); if(i>0) { out.println("成功!"); } else { out.println("Failed!"); } } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
另外加: import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.DriverManager; import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; public class dbtest { infoBean bean = new infoBean(); BeanListHandler h = new BeanListHandler(bean.getClass()); Connection connect = null; List result = new ArrayList(); try { Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection( "jdbc:mysql://localhost/normaltest", "root", "root"); QueryRunner run = new QueryRunner(); result = (ArrayList) run.query(connect, "SELECT username,age,money,usertime FROM info", h); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; }
|
发表评论
-
rerrtert
2010-08-26 15:49 18rew -
MyEclipse 快捷键大全!
2009-12-31 21:12 1677Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl ... -
JfreeChart中文乱码解决方案
2009-12-31 14:30 2313原帖地址:http://blog.csdn.net/wangh ... -
使用三方数据库连接池 Commons DBCP
2009-11-28 11:17 4123本内容转帖,原文地址:http://www.iteye.com ... -
读源码学习 Servlet过滤器
2009-11-26 15:09 2398过滤器在Servlet2.3中规范的,能够对Servlet容器 ... -
在jsp中对mysql数据库分页的方法
2009-11-20 17:22 5133针对分页,首先开发一个 PageBean 用来控制页面参数: ... -
javaBean为什么要实现Serializable接口?
2009-11-18 11:37 1239Java的"对象序列化"能让你将一个实现了 ... -
使用JSP标签实例 实现Tag接口
2009-10-30 15:47 3451创建的标签类,必须实现javax.servlet.jsp.ta ... -
读源码学jsp自定义标签 (2) IteataionTag接口
2009-10-29 23:48 1350IterationTag接口继承了Tag接口,增加了一个方法和 ... -
读源码学jsp自定义标签 (1) Tag接口
2009-10-29 22:58 2163最近开始学些jsp的自定 ... -
读源码学Servlet(2)Servlet实现的ServletConfig接口的应用
2009-10-24 12:20 1920GenericServlet抽象类实现了ServletConf ... -
关于jsp页面中文字符集的设置
2009-10-24 11:29 2302为解决JSP中显示中文乱码的问题,一般我们在HttpRespo ... -
读源码学Servlet(5)GenericServlet中的service 方法
2009-10-23 16:36 2253观察GenericServlet源码中关于service()方 ... -
读源码学Servlet(4)关于覆盖GenericServlet的Init()方法
2009-10-23 16:17 3506之前提到servlet 生命周期中的三个阶段,第一个阶段中se ... -
读源码学Servlet(3)Servlet的生命周期
2009-10-23 15:31 1994在javax.servlet.Servlet接口中,定义了针对 ... -
读源码学Servlet(1)GenericServlet 源码分析
2009-10-23 14:05 5545Servlet API的核心就是javax.servlet.S ... -
SVN 客户端使用培训
2009-09-03 18:10 1139最近公司上SVN版本控制系统,今天给他们做了一次培训。 讲的 ... -
servlet中service doGet doPost 的关系
2009-08-25 23:25 6581在servlet中默认情况下 ... -
JavaBean的作用域
2009-08-19 01:18 1012等待添加~~ -
JavaBean使用之基本规范
2009-08-19 01:12 1500JavaBean是一种特殊的Java类,他遵从一定的设计模式, ...
相关推荐
DBUtils 是一个非常重要的 Python 模块,专为数据库连接设计,它在 Python 的数据库应用开发中扮演着不可或缺的角色。这个模块主要目的是提供一个稳定、健壮的接口,用于管理和操作数据库连接,使得开发者能够更方便...
Python的DBUtils是一个非常实用的库,主要用于增强Python标准库中的`DB-API 2.0`接口,提供了线程安全性和连接池管理等功能。DBUtils是基于PEP 249设计的,它使得数据库连接的管理和维护变得更加简单,尤其在多线程...
Dbutils 是 Apache Commons DbUtils 的简称,它是一个用于简化 Java 数据库编程的开源库。Dbutils 基于 JDBC(Java Database Connectivity),提供了一套简洁、高效且易于使用的API,帮助开发者更方便地处理数据库...
DBUtils是Apache Commons库中的一个组件,它提供了一套简单易用的数据库操作API,用于简化Java中的数据库访问。在本项目中,你将找到一个自己编写的简易DBUtils实现,虽然它不是Apache官方的DBUtils,但其设计思想和...
**dbutils** `dbutils` 是一个开源的Java库,主要设计用于简化数据库操作,它不是数据访问对象(DAO)框架,也不是像Hibernate那样的对象关系映射(ORM)工具。`dbutils` 提供了一些实用功能,使得在Java程序中进行...
`commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的数据库操作。DBUtils是一个实用程序库,它简化了JDBC(Java Database Connectivity)的使用,提供了...
DBUtils 是一套允许线程化 Python 程序可以安全和有效的访问数据库的模块。DBUtils已经作为 Webware for Python 一部分用来结合 PyGreSQL 访问 PostgreSQL 数据库,当然他也可以用在其他Python应用程序中来访问 DB-...
C3P0和DBUtils是两个非常重要的库,用于简化Java应用程序中的数据库操作。以下是这两个库的详细介绍: C3P0是一个开源的JDBC连接池,它的全称是Commerical-grade Connection Pooling for JDBC。C3P0-0.9.1.2.jar是...
Apache Commons DBUtils是一个Java库,它简化了与数据库交互的任务,是Java开发中常用的数据访问工具。这个压缩包“commons-dbutils-1.3.zip”包含的是DBUtils库的1.3版本。DBUtils库是Apache Commons项目的一部分,...
《Apache Commons DBUtils详解及其在Java数据库操作中的应用》 Apache Commons DBUtils是Apache软件基金会开发的一个开源项目,它提供了一套简洁、高效且实用的工具类,用于简化Java应用程序中的数据库操作。这个...
Apache Commons DbUtils是Java开发中的一个实用工具库,专门针对JDBC(Java Database Connectivity)进行优化,以提供更简洁、高效的数据库操作API。这个库在Java社区中广泛使用,因为它大大减轻了开发者处理数据库...
Python DBUtils 是一个非常实用的库,专门设计用于管理和优化Python程序与数据库之间的连接。它遵循Python的DB-API 2规范,确保与多种数据库适配器兼容,如psycopg2(PostgreSQL)、pyodbc(ODBC)、sqlite3等。...
DBUtils是Java编程环境中一个非常实用的数据库操作工具包,由Apache软件基金会提供。它基于JDBC(Java Database Connectivity)并提供了对数据库操作的简化,让开发者能够更方便、高效地进行数据存取。DBUtils的主要...
**dbutils API 深度解析** `dbutils` 是一个强大的工具库,主要用于在大数据处理和分析场景中提供便捷的交互方式。它通常与Apache Spark等大数据框架结合使用,为开发人员提供了一系列实用的API,以简化数据操作、...
**dbutils** 是一个 Apache Commons 项目,它提供了一个简单且高效的 Java 数据库连接工具集。这个工具包是为了简化数据库操作而设计的,它构建在 JDBC(Java Database Connectivity)之上,为开发人员提供了更方便...
DbUtils是一个在Java开发中广泛使用的数据库操作工具库,它简化了JDBC(Java Database Connectivity)的使用,提供了更加简洁、易用的API接口。DbUtils由Apache软件基金会的Jakarta项目开发,属于Apache Commons系列...
Apache Commons DBUtils是一个Java库,它为处理数据库连接提供了一个简单且有效的方法。这个库的主要目标是简化数据库操作,使得开发人员能够更专注于SQL查询和业务逻辑,而不是处理底层的数据库连接管理。DBUtils是...
赠送jar包:commons-dbutils-1.7.jar; 赠送原API文档:commons-dbutils-1.7-javadoc.jar; 赠送源代码:commons-dbutils-1.7-sources.jar; 赠送Maven依赖信息文件:commons-dbutils-1.7.pom; 包含翻译后的API文档...
《Apache Commons DBUtils详解》 Apache Commons DBUtils是一款在Java编程中广泛使用的数据库操作工具库,它的全称为“Apache Commons Database Utilities”。这个小巧且高效的库为开发者提供了方便、安全的数据库...