DBUtils用法详解

来源:互联网 发布:手机局域网控制软件 编辑:程序博客网 时间:2024/05/01 15:18

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
 Click here to find out more!  

正如它的名字所提示的,这一接口执行处理一个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的项目中去使用。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 地板颜色选浅了怎么办 地板买的太暗了怎么办 木地板贴好后发现颜色不好看怎么办 鞋上鞋扣老是开怎么办 虚拟机的win10蓝屏重启怎么办 fs免拆模板专利怎么办 新买的床咯吱响怎么办 实木床一动就响怎么办 cad图纸是斜的怎么办 老房子土墙腻子老掉怎么办 生完孩子子宫大怎么办 刚开的店没人怎么办 刚开业的店没人怎么办 美容店没人进店怎么办 新店开业招不到营业员怎么办 无意开通了花呗怎么办? 花呗灰色用不了怎么办 花呗逾期用不了怎么办 店铺花呗关闭了怎么办 花呗无法使用了怎么办 借呗自动关闭了怎么办 蚂蚁花呗无法开通怎么办 花呗本月还不了怎么办 蚂蚁借呗没钱还怎么办 淘宝账号被限制登录怎么办 辱骂买家被投诉骚扰怎么办 淘宝卖家骚扰买家怎么办 被淘宝卖家电话骚扰怎么办 闲鱼卖东西买家退货运费怎么办 淘宝被恶意拍单怎么办 炒作信用度评价被删除怎么办 删除淘宝评价之后卖家不返现怎么办 美团客户给差评怎么办 淘宝卖家评价差怎么办 淘宝卖家发货未揽收怎么办 周不过5我超过了怎么办 淘宝申请退款后卖家不确认怎么办 淘宝直通车b类扣12分怎么办 淘宝店铺被买家投诉怎么办 淘宝店铺遭买家投诉怎么办 淘宝店铺被买家恶意投诉怎么办