java里的离线数据集
来源:互联网 发布:java打印倒三角乘法表 编辑:程序博客网 时间:2024/06/10 22:53
1 前言
听说在java里面一直没有封装很好的类似dataset的离线数据集,但是java里面同样提供了封装的不好的离线数据集rowset,在早些时候的jdk版本(jdk1.4及以前)其实已经提供了rowset的jar包,但是sun公司只提供了5个接口,并没有提供接口的实现,而我们要完成我们想要的工作就必须自己写实现,但同时,由于广大网友的要求(觉得这样实在不方便),sun公司又单独提供了一个有实现的rowset.jar包,放在sun的官方网站上供人们下载和使用,不过在他的sun官方网站上面该jar包的名字是jdbc_rowset_tiger-1_0_1-mrel-jwsdp.zip,在jdk1.5里面sun公司把这个jar包重写了实现,所以我们如果下载了sun公司单独提供的rowset的jar包或者安装了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 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格式。
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里的离线数据集
- java里的离线数据集
- java的离线数据集(RowSet)
- java的离线数据集(RowSet)简单入门
- java随机抽取数组里的数据?
- skb里的数据
- Java里的浮点型数据。(摘自精通Jbuilder 2005)
- JAVA有选择性删除一个集合里的所有数据
- java将数据库里的数据导出到excel
- Java 比较两个HashMap里的数据是否一致
- java将数据库里的数据导出到excel
- 基于文件的离线数据同步方案
- 基于文件的离线数据同步方案
- 离线地图数据tpk的制作
- JAVA代理如把远程服务器里的DOMINO数据库数据插入到SQL里
- jdbc中的离线数据集(RowSet)
- 离线内存中数据集dataset内部结构
- ADO.NET-离线模式操作数据集
- OpenGL中不用AUX库来加载BMP图片作为纹理
- 匹配html标记的正则
- Windows下Tuxedo的安装与配置-客户端
- 面向 Java 开发人员的 Ajax: Ajax 的 Java 对象序列
- 每天花1037563.95¥
- java里的离线数据集
- 终于有个高效率的排列组合算法
- 数据库访问层设计与实现(2)
- 从用户界面事件中汲取可用性信息
- 面向 Java 开发人员的 Ajax: 结合 Direct Web Remoting 使用 Ajax
- WSDP 2.0产生的WebService类在Java Application Server 9下的问题
- 拨开SOA的面纱
- 程序设计:百度语言翻译机
- DataAdapter的Update方法 .and. Fill方法