① JDBC中的几种结果集ResultSet,RowSet求解
获得可滚动的结果集:
Statement stat = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);获得可更新的结果集:
Statement stat = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATE);ResultSet中的Type取值:
TYPE_FORWARD_ONLY 不可滚动
TYPE_SCROLL_INSENSITIVE 结果集可滚动,但对数据库变化不敏感
TYPE_SCROLL_SENSITIVE 结果集可滚动,但对数据库变化敏感
ResultSet中的Concurrency取值:
CONCUR_READ_ONLY 结果集不能用于更新数据库
CONCUR_UPDATEABLE 结果集可以用于更新数据库
元数据的概念
通过java.sql.DatabaseMetaData可以获取数据库结构和表的详细信息。
可滚动的结果集虽然强,但交换过程,必须始终与数据库保持连接。如果一个操作要持续很久,则占用了宝贵的数据库连接资源。这时可以考虑使用行集,即RowSet。
RowSet继承自ResultSet,但不必始终保持与数据库的连接。
② 如何使用Java中的RowSet
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES"); CachedRowSet crs = new CachedRowSetImpl(); //也可以是WebRowSetImpl,FilteredRowSetImpl,JoinRowSetImpl,因为他们均继承自CachedRowSetImpl crs.populate(rs); 运行populate()方法后,ResultSet对象rs中的数据就被填充到crs对象中了。 (3)用XML填充 如果您打算将XML作为数据交换格式在客户端和你的服务器之间传输数据并且向实现数据离线编辑、或者向使用XML格式的数据的话,可以使用WebRowSet接口来用XML填充数据。 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 对象相比更为简洁。
③ java中JdbcRowSetImpl类访问限制怎么回事
JdbcRowSetImpl
是内部专用API,在未来发行版中可能会删除,所以使用它会出现警告,不过在保证其余正确的情况下可以继续运行程序,程序不会报错误的!
④ 为什么用CachedRowSet的acceptchange()方法会提示无法确认表名
要不把这句String sql="select Book_User.* from Book_User";改成:String sql="select * from Book_User";先试试
⑤ java 使用RowSet这一套东西后,数据库连接怎么管理
需要自己管理,自己编写代码进行连接池管理。不过,现在还会有人会用rowset这一套吗?最起码也会用诸如spring之类的数据库管理框架吧。
⑥ java使用CachedRowSet 进行离线操作
import java.sql.*;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.util.*;
public class try_0822 {
public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn; conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/tw","root","123");
System.out.println("数据库链接成功");
PreparedStatement statl;
String sql="insert into tt values (?,?)";
statl=conn.prepareStatement(sql);
statl.setString(1,"fd");
statl.setString(2,"fdf");
int x=statl.executeUpdate();
}
catch(SQLException SQLe){
System.out.println("数据库错误!");
}
catch(Exception h){}
// TODO, add your application code
// System.out.println("Hello World!");
}
}
上面的123是你自己的密码,我这里有个表叫做tt,根据自己的改变吧
⑦ Java程序进行编译的时候。提示找不到符号 类:cachedrowsetimpl。
楼主,你有使用CachedRowSetlmpl但没见有CachedRowSetlmpl的类的定义