`
geshenyi
  • 浏览: 100930 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DynaClass,DynaBean使用 .

 
阅读更多
DynaClass/DynaBean
这似乎是BeanUtils中最有趣的部分之一了,很简单,简单到光看这两个接口中的方法会不明白
为什么要设计这两个接口。不过看到ResultSetDynaClass后,就明白了。下面是java doc中的代码:
    ResultSet rs = ...;
    ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);
    Iterator rows = rsdc.iterator();
    while (rows.hasNext())  {
      DynaBean row = (DynaBean) rows.next();
      ... process this row ...
    }
    rs.close();
原来这是一个ResultSet的包装器,ResultSetDynaClass实现了DynaClass,它的iterator方法返回一个
ResultSetIterator,则是实现了DynaBean接口。
在获得一个DynaBean之后,我们就可以用
      DynaBean row = (DynaBean) rows.next();
      System.out.println(row.get("field1")); //field1是其中一个字段的名字

再看另一个类RowSetDynaClass的用法,代码如下:
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost/2hu?useUnicode=true&characterEncoding=GBK";
String username="root";
String password="";

java.sql.Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url);
ps=con.prepareStatement("select * from forumlist");
rs=ps.executeQuery();
//先打印一下,用于检验后面的结果。
while(rs.next()){
System.out.println(rs.getString("name"));
}
rs.beforeFirst();//这里必须用beforeFirst,因为RowSetDynaClass只从当前位置向前滚动

RowSetDynaClass rsdc = new RowSetDynaClass(rs);
rs.close();
ps.close();
List rows = rsdc.getRows();//返回一个标准的List,存放的是DynaBean
for (int i = 0; i <rows.size(); i++) {
DynaBean b=(DynaBean)rows.get(i);
System.out.println(b.get("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
con.close();
} catch (Exception e) {
}
}

是不是很有趣?封装了ResultSet的数据,代价是占用内存。如果一个表有10万条记录,rsdc.getRows()
就会返回10万个记录。@_@

需要注意的是ResultSetDynaClass和RowSetDynaClass的不同之处:
1,ResultSetDynaClass是基于Iterator的,一次只返回一条记录,而RowSetDynaClass是基于
List的,一次性返回全部记录。直接影响是在数据比较多时ResultSetDynaClass会比较的快速,
而RowSetDynaClass需要将ResultSet中的全部数据都读出来(并存储在其内部),会占用过多的
内存,并且速度也会比较慢。
2,ResultSetDynaClass一次只处理一条记录,在处理完成之前,ResultSet不可以关闭。
3,ResultSetIterator的next()方法返回的DynaBean其实是指向其内部的一个固定
对象,在每次next()之后,内部的值都会被改变。这样做的目的是节约内存,如果你需要保存每
次生成的DynaBean,就需要创建另一个DynaBean,并将数据复制过去,下面也是java doc中的代码:
    ArrayList results = new ArrayList(); // To hold copied list
    ResultSetDynaClass rsdc = ...;
    DynaProperty properties[] = rsdc.getDynaProperties();
    BasicDynaClass bdc =
      new BasicDynaClass("foo", BasicDynaBean.class,
                         rsdc.getDynaProperties());
    Iterator rows = rsdc.iterator();
    while (rows.hasNext()) {
      DynaBean oldRow = (DynaBean) rows.next();
      DynaBean newRow = bdc.newInstance();
      PropertyUtils.copyProperties(newRow, oldRow);
      results.add(newRow);
    }

事实上DynaClass/DynaBean可以用于很多地方,存储各种类型的数据。
分享到:
评论

相关推荐

    json所有的jar包下载

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...

    使用json所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/...

    使用json-lib-2.2.2-jdk15.jar所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...

    Dyna Bean的使用

    我们可以使用 BasicDynaClass 的构造函数来定义属性,并指定 DynaBean 的基础类型(默认为 BasicDynaBean 或者自定义实现 DynaClass 接口的类)。 在实际使用中,例如处理一组基本报表信息,我们可能需要创建一个 ...

    有关动态bean的一些用法

    2. **DynaClass接口**:DynaClass是描述DynaBean结构的接口,包含了DynaBean的所有属性信息。它的实现类如BasicDynaClass和WrapDynaClass负责创建和管理DynaBean的属性定义。在创建DynaBean实例之前,我们需要先定义...

    JEPLUS功能新特性.rar

    01.JEPLUS新特性(系统功能).mp4 02.JEPLUS新特性(数据源讲解).mp4 ...19.JEPLUS数据库操作DynaBean.mp4 20.Excel导入技巧.mp4 21.定时任务、流程事件灵活运用.mp4 22.对接第三方数据库使用案例.mp4

    java使用json的必备7个jar包

    在java中使用json需要引入以下六个jar包,分别为: commons-lang-2.4.jar commons-collections-3.2.1.jar commons-beanutils-1.8.3.jar json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging-1.1.3.jar ...

    commons-beanutils-1.6.zip

    开发者可以使用`DynaClass`来创建不需预先定义的DynaBean实例。 5. **Introspector**: 这个模块提供了对JavaBean的元数据(如属性、构造函数和方法)的深入洞察。通过`describe()`方法,开发者可以获取Bean的完整...

    JSON需要的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...

    json使用介绍系列一.pdf

    同样,缺少`ezmorph-1.0.6.jar`会导致`net.sf.ezmorph.Morpher`类无法找到,而`commons-beanutils-1.8.0.jar`对于`DynaBean`类的使用至关重要。 在实际使用中,将Java对象转换为JSON格式,可以通过JSON库提供的API...

    java--json解析包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...

    commons-beanutils

    `DynaClass`和`DynaProperty`是支持DynaBean的类,它们提供了动态管理属性的能力。 6. **国际化支持**: BeanUtils也支持国际化(i18n)和本地化(l10n)功能,可以通过`MessageResources`类来处理不同地区的消息...

    json所需JAR包合集

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections-3.2.2.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons...

    json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx

    **MorphDynaBean**是ezmorph库中的一个类,实现了`org.apache.commons.beanutils.DynaBean`接口。这个接口允许在运行时动态地添加、删除和获取属性,提供了一种灵活的方式来处理和操作对象。`MorphDynaBean`可以接收...

    使用MINA进行UDP通信实现数据导入

    有丰富的MINA通信软件开发经验,现在已经有成熟的底层框架(结合了反射、DynaBean、Spring等多种技术),可以实现程序自动对上位机和下位机之间的通信协议进行解析,并在国网公司智能电网的大型项目中使用。...

    导入json包的一些注意

    如果没有它,你可能会遇到`java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean`的错误。 2. **commons-collections.jar**: 包含了集合操作的各种实用工具类,如`ListOrderedMap`,在处理JSON...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    - **DynaBean/DynaClass/DynaProperty**:提供了动态Bean的支持。 - **BasiceDyanBean/BasicDynaClass**:基本的动态Bean实现。 - **WrapDynaBean/WrapDynaClass/ConvertingWrapDynaBean**:提供了包装动态Bean的...

    commons.collections-3.2.1和commons-beanutils-1.9.2和commons.collections-3.2.1

    这两个库常常一起使用,因为BeanUtils在处理Bean属性时,可以利用Collections库中的工具类进行更复杂的操作。例如,当需要批量设置一个Bean集合的相同属性时,可以先用Collections的函数处理集合,然后再通过...

    java-json解析包jar

    对于更复杂的情况,如转换Java的类实例,可能需要实现`Serializable`接口或使用自定义的转换逻辑。 ```java JSONObject obj = new JSONObject(); obj.put("name", "John"); obj.put("age", 30); // 或者,对于复杂...

Global site tag (gtag.js) - Google Analytics