jdbc(RowSet离线结果集)(二)

2014-11-24 10:09:06 · 作者: · 浏览: 2
late(rs);
运行populate()方法后,ResultSet对象rs中的数据就被填充到crs对象中了。

(3)用XML填充
如果您打算将XML作为数据交换格式在客户端和你的服务器之间传输数据并且向实现数据离线编辑、或者向使用XML格式的数据的话,可以使用WebRowSet接口来用XML填充数据。
[java]
WebRowSet wrs = new WebRowSetImpl();
wrs.readXml(new FileReader(new File("D:\\employees.xml")));
运行readXml()方法后,employees.xml文件的数据就被填充到wrs对象中了。employees.xml 文件的格式参见附录。

(4)用其他方法填充
如果形用其他方式填充,比如csv、excel、text、http等格式或方法填充数据,那么就需要自己编写代码实现RowSet。


4、操作RowSet中的数据及元数据
除了ResultSet提供的操作数据和元数据方法外,RowSet接口没有提供太多额外的方法。
1)更新数据
rs.absolute(5);
rs.updateInt(1, 10);
rs.updateInt(2, 1000);
rs.updateString(3, "John");
rs.updateRow();

(2)插入数据
rs.moveToInsertRow();
rs.updateInt(1, 10);
rs.updateInt(2, 1000);
rs.updateString(3, "John");
rs.insertRow();

(3)删除数据
rs.absolute(5);
rs.deleteRow();

(4)设置属性
rs.setCommand("select id, salary, name from employees where id = ");
rs.setInt(1, 1);
rs.execute();

(5)元数据
RowSetMetaData rsmd = (RowSetMetaData)rs.getMetaData();
int count = rsmd.getColumnCount();
int type = rsmd.getColumnType(2);

5、事务与更新底层数据源
RowSet本身只代表具体数据,事务以及底层数据源的更新是与底层数据源密切相关的概念。对于JDBC数据源,相应的标准接口JdbcRowSet通过与数据库相关的方法来来实现,如commit(),rollback()等。对于标准接口的中非连接rowset,如CachedRowSet,则在对RowSet中的数据改动后,通过运行acceptChanges()方法,在内部调用 RowSet 对象的 writer 将这些更改写入数据源,从而将 CachedRowSet 对象中的更改传播回底层数据源。
6、可序列化非连接RowSet
使用 CachedRowSet 对象的主要原因之一是要在应用程序的不同组件之间传递数据。因为 CachedRowSet 对象是可序列化的,所以可使用它(举例来说)将运行于服务器环境的企业 JavaBeans 组件执行查询的结果通过网络发送到运行于 web 浏览器的客户端。
由于 CachedRowSet 对象是非连接的,所以和具有相同数据的 ResultSet 对象相比更为简洁。因此,它特别适于向瘦客户端(如 PDA)发送数据,这种瘦客户端由于资源限制或安全考虑而不适于使用 JDBC 驱动程序。所以 CachedRowSet 对象可提供一种“获取各行”的方式而无需实现全部 JDBC API。
ebRowSet继承自CachedRowSet,除了拥有CachedRowSet的优点外,还可以将WebRowSet输出成XML,也可以将XML转换成WebRowSet,更加适合在Web环境中使用。标准的 WebRowSet XML 模式定义位于 URIhttp://java.sun.com/xml/ns/jdbc/webrowset.xsd。将WebRowSet保存为XML的代码事例如下:

[java]
wrs.setCommand("select id, salary, name from employees");
wrs.execute();
wrs.writeXml(new FileWriter(new File("D:\\employees.xml")));

附:employees.xml
[html]
< xml version="1.0" >
xsi:schemaLocation="http://java.sun.com/xml/ns/jdbc http://java.sun.com/xml/ns/jdbc/webrowset.xsd">

select id, salary, name from employees
1008

true
1000
0
2




0
0
0
true
ResultSet.TYPE_SCROLL_INSENSITIVE
false
employees
jdbc:mysql:///test

com.sun.rowset.providers.RIOptimisticProvider
Sun Microsystems Inc.
1.0
2
1



3

1
false
false
false
0
true
true
11
id
id

11
0
employees
test
4
INT


2
false
false
false
1
true
true
11
salary
salary

11
0
employees
test
4
INT


3
false
false
false
1
false
true
25
name
name

25
0
employees
test
12
VARCHAR




1
1000
John


2
1200
Tom