|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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了。
未完待续……
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。 |
|