java里的离线数据集

原创 2006年05月28日 21:53:00

1       前言

听说在java里面一直没有封装很好的类似dataset的离线数据集,但是java里面同样提供了封装的不好的离线数据集rowset,在早些时候的jdk版本(jdk1.4及以前)其实已经提供了rowsetjar包,但是sun公司只提供了5个接口,并没有提供接口的实现,而我们要完成我们想要的工作就必须自己写实现,但同时,由于广大网友的要求(觉得这样实在不方便)sun公司又单独提供了一个有实现的rowset.jar包,放在sun的官方网站上供人们下载和使用,不过在他的sun官方网站上面该jar包的名字是jdbc_rowset_tiger-1_0_1-mrel-jwsdp.zip,在jdk1.5里面sun公司把这个jar包重写了实现,所以我们如果下载了sun公司单独提供的rowsetjar包或者安装了jdk1.5,我们都可以轻松的感受sun公司的离线数据集的快乐。

2       准备工作

在使用这个下载的离线数据集包的时候,我们首先要做的一件事就是把他改成中国地区能使用的jar包,因为他提供的这个jar包默认状态下是英文地区使用的,如果不这样做的话只要调用new CachedRowSetImpl(),就可以创建一个CachedRowSet对象,但就是这个new CachedRowSetImpl(),在使用时程序执行这个语句会抛出异常。根本用不了。

解决方法:

1          解压jdbc_rowset_tiger-1_0_1-mrel-ri.zip,产生rowset.jar文件。

2          再解压rowset.jar文档,在产生的com/sun/rowset目录下找到RowSetResourceBundle.properties文件。

3          RowSetResourceBundle.properties更名为

RowSetResourceBundle_CN.properties

4          重新创建rowset.jar包说明:这里_CN表示所处中国。不同的国家,这个名称不同经过以上的步骤就可以正常使用new CachedRowSetImpl().

3       rowset简介

Java 5Java Database Connectivity (JDBC)方面加强了支持,其中加入了新的包javax.sql.rowsetjavax.sql.rowset.serialjavax.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格式。

4       实现

由于我个人体会这块最有用并且最基础的是CachedRowSet部分,所以我只是做了CachedRowSet的实现例子。

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

例子代码如下:

package src;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.sql.RowSet;

import com.sun.rowset.CachedRowSetImpl;

 

public class testCachedRowSet {

 

       public static void testCachedRowSet() {

      

       }

      

       public static com.sun.rowset.CachedRowSetImpl Query_all() throws SQLException{

              Connection conn = null;

              String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=testrowset";

              String user="sa";

              String password="sa";

           // 获得数据库连接

              conn= DriverManager.getConnection(url,user,password);

              java.sql.Statement stmt = conn.createStatement();

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

              ResultSet rs =  stmt.executeQuery("select * from test");                                 // 根据ResultSet对象生成CachedRowSet类型的对象

              CachedRowSetImpl crs = new CachedRowSetImpl();

              crs.populate(rs);

              // 关闭ResultSet

              rs.close();

              // 关闭数据库的连接

              conn.close();

              return crs;

       }

       public static void main(String[] args) throws SQLException {

              String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";

              Connection conn = null;

              String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=testrowset;SelectMethod=Cursor";//最后注意事项的部分

              String user="sa";

              String password="sa";

                     try {

                            Class.forName(driver).newInstance();

                            CachedRowSetImpl crs = new CachedRowSetImpl();

                            crs=Query_all();

                         crs.setTableName("test");

                         crs.next();

                         //改操作   

                         crs.updateString(1, "434");

                         //查操作

                         String id = crs.getString("ID");

                         System.out.println(id);

                         //删操作

                         crs.deleteRow();

                         crs.updateRow();

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

                         conn= DriverManager.getConnection(url,user,password);

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

                         crs.acceptChanges(conn);

                         // 关闭CachedRowSet

                         crs.close();

                         // 关闭数据库连接

                         conn.close();

                     } catch (InstantiationException e) {

                            e.printStackTrace();

                     } catch (IllegalAccessException e) {

                            e.printStackTrace();

                     } catch (ClassNotFoundException e) {

                            e.printStackTrace();

                     }

       }

}

5       注意事项:

JDBC的时候发现一个问题:“java.sql.SQLException:[Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.”查了一下微软的官方网站原来才发现,我们使用JDBC的时候所打开的数据库连接的默认设置是“手动模式下的直接连接模式”,在该模式下,不能对SQLServer 的数据库做批量操作,连微软自己都承认这是设计的问题,其他数据库暂时没有发现这个问题,要改变的话我们必须对连接字符串做如下修改:“String url="jdbc:microsoft:sqlserver://localhost;DatabaseName;SelectMethod=Cursor";”以保证我们的模式是光标模式而不是直接模式。

 

6       参考文献:

http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B313181

http://www-128.ibm.com/developerworks/cn/java/j-zhanghz2/

java离线版

  • 2013年12月09日 15:14
  • 16.41MB
  • 下载

jdbc(RowSet离线结果集)

jdbc(RowSet离线结果集) ResultSet是使用Jdbc编程的人入门和常用的操作数据库的类,自 JDK 1.4 开始,易于使用RowSet接口被引入。RowSet 接口扩展了标准 j...
  • lelong2002huyao
  • lelong2002huyao
  • 2013年09月05日 10:14
  • 603

java里的离线数据集

1       前言听说在java里面一直没有封装很好的类似dataset的离线数据集,但是java里面同样提供了封装的不好的离线数据集rowset,在早些时候的jdk版本(jdk1.4及以前)其实已...
  • colincrazy
  • colincrazy
  • 2007年05月15日 19:17
  • 4031

java的离线数据集(RowSet)

如果在开发应用的时候没有使用任何持久层框架,而是直接使用jdbc 的api编程的话,大家最长使用的就是ResultSet接口进行数据的读取了,但是大家也会觉得很不方便,因为ResultSet是在线的...
  • q1063823095
  • q1063823095
  • 2016年06月25日 20:58
  • 221

Thinking in BigData(九)大数据hadoop集群下离线数据存储和挖掘架构

基于大数据hadoop集群下离线数据存储和挖掘分析架构: 可以分为五个层次:1、数据存储层;2、集群架构层;3、分布式计算引擎层;4、算法合成层;5、数据可视化层;五个层次,组成了,如何把基...
  • yczws1
  • yczws1
  • 2014年03月03日 16:37
  • 5319

java的离线数据集(RowSet)简单入门

如果在开发应用的时候没有使用任何持久层框架,而是直接使用jdbc 的api编程的话,大家最长使用的就是ResultSet接口进行数据的读取了,但是大家也会觉得很不方便,因为ResultSet是在线的数...
  • sc6231565
  • sc6231565
  • 2014年05月29日 23:29
  • 544

tensorflow中下载mnist数据集

#coding:utf-8 from __future__ import absolute_import from __future__ import division from __future__...
  • szj_huhu
  • szj_huhu
  • 2017年06月19日 12:59
  • 525

Hibernate检索方式:离线条件查询

投影查询:就是只查询某几个属性的时候 如果是QBC的只想显示某几个属性,可以通过setProjection(),往list集合里添加属性。 在H...
  • y_dzaichirou
  • y_dzaichirou
  • 2016年12月27日 13:43
  • 646

java api文档离线查询器

写java程序的时候,经常要到官网(http://docs.oracle.com/javase/8/docs/api/index.html)查文档,用着用着感觉有时有些不方便: 1.java官网...
  • name_z
  • name_z
  • 2016年03月11日 17:24
  • 1883

Hibernate的离线条件查询

为什么 在多条件查询的时候,需要在Web层封装相应的参数到Criteria,而在Dao层才真正的去执行查询数据库的操作,所以需要在Web层创建Criteria并将其传递到Dao层,这个时候就不能在We...
  • github_36116217
  • github_36116217
  • 2016年09月20日 20:08
  • 1833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java里的离线数据集
举报原因:
原因补充:

(最多只允许输入30个字)