文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
Java频道
 资讯动态   考试认证   新手入门   核心技术   高级技术   J2EE   J2ME   XML   开源技术   其他技术
您现在的位置: IT文谷 >> 开发平台 >> Java >> 高级技术 >> 设计模式 >> 文章正文
运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2
运用Java 5 RowSet新特性访问DB2
运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2
运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2

  RowSet 新特性简介

  Java 5在Java Database Connectivity (JDBC)方面加强了支持,其中加入了新的包javax.sql.rowset,javax.sql.rowset.serial,javax.sql.rowset.spi。从RowSet接口继承规定了五个新的接口:

  1. CachedRowSet: CachedRowset可以不用与数据源建立长期的连接,只有当从数据库读取数据或是往数据库写入数据的时候才会与数据库建立连接,它提供了一种轻量级的访问数据库的方式,其数据均存在内存中。

  2. JdbcRowSet:对ResultSet的对象进行包装,使得可以将ResultSet对象做为一个JavaBeans ™ 组件。

  3. FilteredRowSet:继承自CachedRowSet,可以根据设置条件得到数据的子集。

  4. JoinRowSet:继承自CachedRowSet,可以将多个RowSet对象进行SQL Join语句的合并。

  5. WebRowSet:继承自CachedRowSet,可以将WebRowSet对象输出成XML格式。

  下面分别演示如何使用这五个新接口。



  实验环境

  IBM DB2 Universal 8.1
  数据库名:DemoDB
  数据库用户名:db2admin
  数据库密码:password



  CachedRowSet

  CachedRowSet可以通过调用populate(ResuletSet rs)来生成数据,一旦获得数据,CachedRowSet就可以断开与数据库的连接,直到往数据库写入数据的时候才需建立连接。

  可以使用自己扩展的或是使用Reference Implement的实现类进行访问数据库。下面的代码演示了如何根据ResultSet建立一个CachedRowSet对象,在中断与数据库连接的情况下,读取数据,并做更新,最后再获取数据库连接,将更新落实到数据库中。




public static void testCachedRowSet(){

	Connection conn = null;

	try {

		// 获得数据库连接

	    conn= DriverManager.getConnection(DB2URL, DB2USER, DB2PASSWORD);

	    Statement stmt = conn.createStatement();

	    // 查询数据库,获得表数据

	    ResultSet rs = stmt.executeQuery("select * from student");//$NON-NLS-1$

	    // 根据ResultSet对象生成CachedRowSet类型的对象

	    CachedRowSetImpl crs = new CachedRowSetImpl();

	    crs.populate(rs);

	    // 关闭ResultSet

		rs.close();

	    // 关闭数据库的连接

	    conn.close();

	    // 在中断与数据库连接的情况下,对CachedRowSet进行操作

	    operateOnRowSet(crs);

	    // 重新获取与数据库的连接

	    conn= DriverManager.getConnection(DB2URL, DB2USER, DB2PASSWORD);

	    // 将CachedRowSet的内容更新到数据库

	    crs.acceptChanges(conn);

	    // 关闭CachedRowSet

	    crs.close();

	    // 关闭数据库连接

	    conn.close();

	} catch (InstantiationException e) {

	    System.out.println("Andrew: InstantiationException!");//$NON-NLS-1$

	} catch (IllegalAccessException e) {

	    System.out.println("Andrew: IllegalAccessException!");//$NON-NLS-1$

	} catch (ClassNotFoundException e) {

	    System.out.println("Andrew: ClassNotFoundException!");//$NON-NLS-1$

	}catch (SQLException e) {

	  	System.out.println("Andrew: SQLException!");//$NON-NLS-1$

		e.printStackTrace();

	}	

}


  其中operateOnRowSet方法遍历读取RowSet中的元素,并将id值加1。RowSet允许注册监听器,可以在光标移动,RowSet发生改变时触发。其具体代码如下:




public static void operateOnRowSet(RowSet rs){

	// 为RowSet注册监听器

	MyRowsetListener myListener = new MyRowsetListener();

    rs.addRowSetListener(myListener);

    // 操作RowSet数据

	try{

		// 遍历读取数据

		while (rs.next()) {

			String id = rs.getString("ID");//$NON-NLS-1$

	        String name = rs.getString("NAME");//$NON-NLS-1$

	        System.out.println("ID="+id+",NAME="+name);//$NON-NLS-1$

	        //在id最末位连接"1"

	        rs.updateString(1, id+"1");

	    }

	}catch (SQLException e) {

	    System.out.println("Andrew: SQLException!");//$NON-NLS-1$

		e.printStackTrace();

	}

}

class MyRowsetListener implements RowSetListener{

	// 光标发生移动

	public void cursorMoved(RowSetEvent event) {

		System.out.println("cursor moved");

	}

	// row发生改变

	public void rowChanged(RowSetEvent event) {

		System.out.println("row changed");

	}

	// RowSet发生改变

	public void rowSetChanged(RowSetEvent event) {

		System.out.println("row set changed");

	}

}

public static void main(String[] args) {

	try {

		Class.forName(DB2DRIVER).newInstance();

	} catch (InstantiationException e) {

		System.out.println("Andrew: InstantiationException!");//$NON-NLS-1$

	} catch (IllegalAccessException e) {

		System.out.println("Andrew: IllegalAccessException!");//$NON-NLS-1$

	} catch (ClassNotFoundException e) {

		System.out.println("Andrew: ClassNotFoundException!");//$NON-NLS-1$

	}

	testCachedRowSet();

}


  上面的程序的运行结果如下:




cursor moved

ID=001,NAME=zhou

cursor moved

ID=002,NAME=zhang

cursor moved

cursor moved

cursor moved

cursor moved

cursor moved

cursor moved

row set changed


  并且数据库中的id更新为0011,0021。



[1] [2] [3] 下一页  

[1] [2] [3] 下一页

运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2
  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    我的Thinking in Java学习笔记
    使用JBoss和Eclipse创建J2EE应用
    SpringFramework(9)
    NoTitle385
    向Web Service进军--Axis+Tomcat模拟一个银行存取款
    JAVA中的指针,引用及对象的clone
    JAVA中用动态代理类实现记忆功能(二)
    JAVA中用动态代理类实现记忆功能(一)
    DB Test
    基金系统的初步研究(1)
    SpringFramework(8)
    深入浅出Java clone技术(2)
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 本站原创文章,转载时请注明出自文谷及作者姓名
    ③在本网BBS上发表言论者,文责自负。
    ④如您因版权等问题需要与本网联络,请在30日内联系 。
    运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2
    运用Java 5 RowSet新特性访问DB2运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB22006-7-19 21:31:05运用Java 5 RowSet新特性访问DB2

    全站热点
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷论坛
    Tel: 0577-65690019      E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2008 wengu.com 文谷 All Rights Reserved
    浙ICP备05000327号