仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 608|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA教程之用组件beanutils,dbutils简化JDBC操纵

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,固然如今呈现了良多ORM框架,但是仍是有良多伴侣大概还在利用JDBC,就像我如今一样,除进修的时分在利用Hibernate、Spring相似这些优异的框架,事情时一向都在利用JDBC。本文就复杂先容一下使用JakartaCommons旗下beanutils、dbutils简化JDBC数据库操纵,以举一反三,但愿对像我一样在利用JDBC的伴侣有所匡助。
上面就分两部分复杂先容beanutils、dbutils在基于JDBCAPI数据库存取操纵中的使用。第一部分显先容beanutils在JDBC数据库存取操纵中的使用,第二部分先容dbutils在JDBC数据库存取操纵中的使用,最初看看他们的优弱点,谈谈自己在项目使用过程当中对他们的一点心得体味,仅供参考,个中有毛病的中央但愿年夜虾不惜见教,人人多多交换配合前进。
1、JakartaCommonsbeanutils
Beanutils是操纵Bean的锋利兵器,其提过的BeanUtils工具类能够复杂便利的读取或设置Bean的属性,使用Dyna系列,还能够在运转期创立Bean,切合懒人的习气,正如LazyDynaBean,LazyDynaClass一样,呵呵。这些用法已有良多文章说起,也能够参考apache的官方文档。
关于间接使用JDBCAPI会见数据库时(这里针对的是前往了局集ResultSet的查询select),年夜多半都是接纳两种体例,一种是掏出前往的了局集的数据存于Map中,另外一种体例是Bean里。针对第二种体例,Beanutils里供应了ResultSetDynaClass分离DynaBean和RowSetDynaClass分离DynaBean来简化操纵。上面用以个复杂的例子展现一下beanutils的这两个类在JDBC数据库操纵中的使用。
请在本机创建数据库publish,我用的是MySQL,在publish数据库中创建表book,剧本以下:
CREATETABLEbook(
idint(11)NOTNULLauto_increment,
titlevarchar(50)charactersetlatin1NOTNULL,
authorsvarchar(50)charactersetlatin1defaultNULL,
PRIMARYKEY(id)

)
然后用你喜好的编纂器创建一个类BeanutilsJDBCTest,我们先用ResultSetDynaClass来处置,然后再用RowSetDynaClass来完成一样的类,以后看看他们之间有甚么分歧,用ResultSetDynaClass处置的源代码以下所示:
然后用你喜好的编纂器创建一个类BeanutilsJDBCTest,我们先用ResultSetDynaClass来处置,然后再用RowSetDynaClass来完成一样的类,以后看看他们之间有甚么分歧,用ResultSetDynaClass处置的源代码以下所示:
packagecn.qtone.test;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.Iterator;
importorg.apache.commons.beanutils.DynaBean;
importorg.apache.commons.beanutils.PropertyUtils;
importorg.apache.commons.beanutils.ResultSetDynaClass;
publicclassBeanutilsJDBCTest{
publicstaticvoidmain(String[]args){
Connectioncon=null;
Statementst=null;
ResultSetrs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
Stringurl="jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
con=DriverManager.getConnection(url,"root","hyys");
st=con.createStatement();
rs=st.executeQuery("select*frombook");
ResultSetDynaClassrsDynaClass=newResultSetDynaClass(rs);
Iteratoritr=rsDynaClass.iterator();
System.out.println("title-------------authors");
while(itr.hasNext()){
DynaBeandBean=(DynaBean)itr.next();
System.out.println(PropertyUtils.getSimpleProperty(dBean,"title")
+"-------------"+PropertyUtils.getSimpleProperty(dBean,"authors"));
}

}catch(Exceptione){
e.printStackTrace();

}finally{
try{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(con!=null){
con.close();
}

}catch(Exceptione){
e.printStackTrace();
}
}
}
}
用RowSetDynaClass处置的源代码以下所示:
packagecn.qtone.test;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.Iterator;
importjava.util.List;
importorg.apache.commons.beanutils.DynaBean;
importorg.apache.commons.beanutils.PropertyUtils;
importorg.apache.commons.beanutils.RowSetDynaClass;
publicclassBeanutilsJDBCTest{
publicstaticvoidmain(String[]args){
ListrsDynaClass=rsTest();
System.out.println("title-------------authors");
Iteratoritr=rsDynaClass.iterator();
while(itr.hasNext()){
DynaBeandBean=(DynaBean)itr.next();
try{
System.out.println(PropertyUtils.getSimpleProperty(dBean,"name")
+"-------------"+PropertyUtils.getSimpleProperty(dBean,"mobile"));
}catch(Exceptione){
//TODO主动天生catch块
e.printStackTrace();
}

}

}

privatestaticListrsTest(){
Connectioncon=null;
Statementst=null;
ResultSetrs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
Stringurl="jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
con=DriverManager.getConnection(url,"root","hyys");
st=con.createStatement();
rs=st.executeQuery("select*frombook");
RowSetDynaClassrsdc=newRowSetDynaClass(rs);
returnrsdc.getRows();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(con!=null){
con.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}

returnnull;
}
}
这两个办法输入的了局应当是一样的。可是很明显第二种体例比第一种体例要好,它把数据会见部分抽掏出来放到一个办法中,显得复杂明晰。
实在在使用ResultSetDynaClass时,必需在ResultSet等数据库资本封闭之前,处置好那些数据,你不克不及在资本封闭以后利用DynaBean,不然就会抛出非常,非常就是说不克不及在ResultSet以后存取数据(详细的非常名我也忘了),固然你也能够接纳之前的体例一个一个的把数据放到Map里,假如你必定要那样做,倡议仍是别用Beanutils,由于这没带给你甚么优点。总之使用ResultSetDynaClass你的程序的扩大性十分部好。
从第二中体例能够看出,使用RowSetDynaClass能够很好的办理上述ResultSetDynaClass碰到的成绩,RowSetDynaClass的getRows()办法,把每行封装在一个DynaBean对象里,然后,把说有的行放到一个List里,以后你就能够对前往的List里的每个DynaBean举行处置,别的关于DynaBean你还能够接纳尺度的get/set体例处置,固然你也能够用PropertyUtils.getSimpleProperty(Objectbean,Stringname)举行处置。
从下面的剖析中,你应当能够决意你应当利用ResultSetDynaClass仍是RowSetDynaClass了。
固然如今呈现了良多ORM框架,但是仍是有良多伴侣大概还在利用JDBC,就像我如今一样,除进修的时分在利用Hibernate、Spring相似这些优异的框架,事情时一向都在利用JDBC。本文就复杂先容一下使用JakartaCommons旗下beanutils、dbutils简化JDBC数据库操纵,以举一反三,但愿对像我一样在利用JDBC的伴侣有所匡助。
上面就分两部分复杂先容beanutils、dbutils在基于JDBCAPI数据库存取操纵中的使用。第一部分显先容beanutils在JDBC数据库存取操纵中的使用,第二部分先容dbutils在JDBC数据库存取操纵中的使用,最初看看他们的优弱点,谈谈自己在项目使用过程当中对他们的一点心得体味,仅供参考,个中有毛病的中央但愿年夜虾不惜见教,人人多多交换配合前进。
1、JakartaCommonsbeanutils
Beanutils是操纵Bean的锋利兵器,其提过的BeanUtils工具类能够复杂便利的读取或设置Bean的属性,使用Dyna系列,还能够在运转期创立Bean,切合懒人的习气,正如LazyDynaBean,LazyDynaClass一样,呵呵。这些用法已有良多文章说起,也能够参考apache的官方文档。
关于间接使用JDBCAPI会见数据库时(这里针对的是前往了局集ResultSet的查询select),年夜多半都是接纳两种体例,一种是掏出前往的了局集的数据存于Map中,另外一种体例是Bean里。针对第二种体例,Beanutils里供应了ResultSetDynaClass分离DynaBean和RowSetDynaClass分离DynaBean来简化操纵。上面用以个复杂的例子展现一下beanutils的这两个类在JDBC数据库操纵中的使用。
请在本机创建数据库publish,我用的是MySQL,在publish数据库中创建表book,剧本以下:
CREATETABLEbook(
idint(11)NOTNULLauto_increment,
titlevarchar(50)charactersetlatin1NOTNULL,
authorsvarchar(50)charactersetlatin1defaultNULL,
PRIMARYKEY(id)
)
然后用你喜好的编纂器创建一个类BeanutilsJDBCTest,我们先用ResultSetDynaClass来处置,然后再用RowSetDynaClass来完成一样的类,以后看看他们之间有甚么分歧,用ResultSetDynaClass处置的源代码以下所示:
然后用你喜好的编纂器创建一个类BeanutilsJDBCTest,我们先用ResultSetDynaClass来处置,然后再用RowSetDynaClass来完成一样的类,以后看看他们之间有甚么分歧,用ResultSetDynaClass处置的源代码以下所示:
packagecn.qtone.test;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.Iterator;
importorg.apache.commons.beanutils.DynaBean;
importorg.apache.commons.beanutils.PropertyUtils;
importorg.apache.commons.beanutils.ResultSetDynaClass;
publicclassBeanutilsJDBCTest{
publicstaticvoidmain(String[]args){
Connectioncon=null;
Statementst=null;
ResultSetrs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
Stringurl="jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
con=DriverManager.getConnection(url,"root","hyys");
st=con.createStatement();
rs=st.executeQuery("select*frombook");
ResultSetDynaClassrsDynaClass=newResultSetDynaClass(rs);
Iteratoritr=rsDynaClass.iterator();
System.out.println("title-------------authors");
while(itr.hasNext()){
DynaBeandBean=(DynaBean)itr.next();
System.out.println(PropertyUtils.getSimpleProperty(dBean,"title")
+"-------------"+PropertyUtils.getSimpleProperty(dBean,"authors"));
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(con!=null){
con.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
用RowSetDynaClass处置的源代码以下所示:
packagecn.qtone.test;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.Iterator;
importjava.util.List;
importorg.apache.commons.beanutils.DynaBean;
importorg.apache.commons.beanutils.PropertyUtils;
importorg.apache.commons.beanutils.RowSetDynaClass;
publicclassBeanutilsJDBCTest{
publicstaticvoidmain(String[]args){
ListrsDynaClass=rsTest();
System.out.println("title-------------authors");
Iteratoritr=rsDynaClass.iterator();
while(itr.hasNext()){
DynaBeandBean=(DynaBean)itr.next();
try{
System.out.println(PropertyUtils.getSimpleProperty(dBean,"name")
+"-------------"+PropertyUtils.getSimpleProperty(dBean,"mobile"));
}catch(Exceptione){
//TODO主动天生catch块
e.printStackTrace();
}
}
}
privatestaticListrsTest(){
Connectioncon=null;
Statementst=null;
ResultSetrs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
Stringurl="jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
con=DriverManager.getConnection(url,"root","hyys");
st=con.createStatement();
rs=st.executeQuery("select*frombook");
RowSetDynaClassrsdc=newRowSetDynaClass(rs);
returnrsdc.getRows();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(con!=null){
con.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}
returnnull;
}
}
这两个办法输入的了局应当是一样的。可是很明显第二种体例比第一种体例要好,它把数据会见部分抽掏出来放到一个办法中,显得复杂明晰。
实在在使用ResultSetDynaClass时,必需在ResultSet等数据库资本封闭之前,处置好那些数据,你不克不及在资本封闭以后利用DynaBean,不然就会抛出非常,非常就是说不克不及在ResultSet以后存取数据(详细的非常名我也忘了),固然你也能够接纳之前的体例一个一个的把数据放到Map里,假如你必定要那样做,倡议仍是别用Beanutils,由于这没带给你甚么优点。总之使用ResultSetDynaClass你的程序的扩大性十分部好。
从第二中体例能够看出,使用RowSetDynaClass能够很好的办理上述ResultSetDynaClass碰到的成绩,RowSetDynaClass的getRows()办法,把每行封装在一个DynaBean对象里,然后,把说有的行放到一个List里,以后你就能够对前往的List里的每个DynaBean举行处置,别的关于DynaBean你还能够接纳尺度的get/set体例处置,固然你也能够用PropertyUtils.getSimpleProperty(Objectbean,Stringname)举行处置。
从下面的剖析中,你应当能够决意你应当利用ResultSetDynaClass仍是RowSetDynaClass了。
未完待续……

通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 05:58:01 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
透明 该用户已被删除
板凳
发表于 2015-1-22 09:30:20 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
海妖 该用户已被删除
地板
发表于 2015-1-28 05:45:06 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
老尸 该用户已被删除
5#
发表于 2015-1-28 05:47:17 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
6#
发表于 2015-1-30 16:05:49 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
变相怪杰 该用户已被删除
7#
发表于 2015-2-6 13:57:48 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-2-15 17:35:25 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
简单生活 该用户已被删除
9#
发表于 2015-3-4 11:58:48 | 只看该作者
是一种突破用户端机器环境和CPU
山那边是海 该用户已被删除
10#
发表于 2015-3-9 21:48:50 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
若相依 该用户已被删除
11#
发表于 2015-3-13 06:10:29 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
admin 该用户已被删除
12#
发表于 2015-3-20 14:49:18 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-20 20:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表