- RowSet是在java6.0之后才开始有比较多的应用的,在6.0中,java提供了JdbcRowSetImpl,CahedRowSet等五个实现类。
- 以下是jdbcRowSetImpl的一些构造方法:
- jdbcRowSetImpl()创建一个默认的jdbcRowSetImpl对象
- jdbcRowSetImpl(Connection conn)创建一个包装Connection对象作为链接数据库链接来创建对象。
- jdbcRowSetImpl(ResultSet rs) 创建一个包装ResultSet的jdbcRowSetImpl对象
- 以下 是jdbcRowSetImpl的一些常用方法:
- setPassword(String password)设置该RowSet要访问的数据库的密码
- setCommend(String sql)设置用该sql语句的查询结果来装填该RowSet
- execute()执行查询
- populate(ResultSet rs)让改RowSet直接包装给定的ResultSet
- 以下为代码示例和运行效果,具体的讲解穿插在代码中
- 在运行程序之前和执行程序之后分别查询students表,得到的结果如图所示
import com.sun.rowset.JdbcRowSetImpl; import javax.sql.rowset.JdbcRowSet; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class JdbcRowSetTest { private String driver; private String url; private String user; private String pass; public void iniParam(String paramFile) throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(paramFile) ); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public void update(String sql) throws Exception{ Class.forName(driver); try( Connection connection = DriverManager.getConnection(url, user, pass); JdbcRowSet jdbcRs = new JdbcRowSetImpl(connection) // 创建JdbcRowSetImpl对象,他是通过JdbcrowSet接口创建对象的。 ){ jdbcRs.setCommand(sql); // 设置JdbcRowSet的sql语句 jdbcRs.execute(); // 执行sql语句 jdbcRs.afterLast(); // 将指针移动到最后一行之后 // 向前滚动结果集 while(jdbcRs.previous()){ System.out.println(jdbcRs.getString(1) + "\t" + jdbcRs.getString(2)); // 如果匹配到Sname这一列的内容为Smith的话,就将它的Sno列设置为S0 if(jdbcRs.getString("Sname").equals("Smith")){ jdbcRs.updateString("Sno", "S0"); jdbcRs.updateRow(); } } } } public static void main(String args[]) throws Exception{ JdbcRowSetTest jdbcRowSetTest = new JdbcRowSetTest(); jdbcRowSetTest.iniParam("mysql.ini"); jdbcRowSetTest.update("select * from students;"); } } //运行程序,看到以下输出 // S3 Tom // S2 Marry // S1 Smith
-
但是上面这个例子是由缺陷的,因为它直接使用了JdbcRowSetImpl,而它不是一个公开的API,它在未来是可能被删除的。
-
在java7之后,新增了RowSetProvider和 RowSetFactory,前者用来创建后者,后者拥有一系列创建RowSet的方法
-
具体的讲解穿插在代码中
import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class RowSetFactoryTest { private String driver; private String url; private String user; private String pass; public void initParam(String fileName) throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(fileName)); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public void update(String sql) throws Exception{ Class.forName(driver); RowSetFactory factory = RowSetProvider.newFactory(); // 使用RowSetProvider来创建一个RowSetFactory对象 try( JdbcRowSet jdbcRs = factory.createJdbcRowSet()) // 使用RowSetFactory来创捷一个JdbcRowSet对象 { // 接下来这些操作就和上面的例子的操作是一样的了。 jdbcRs.setUrl(url); jdbcRs.setUsername(user); jdbcRs.setPassword(pass); jdbcRs.setCommand(sql); jdbcRs.execute(); jdbcRs.afterLast(); // 将指针移动到最后一行之后 // 向前滚动结果集 while (jdbcRs.previous()){ System.out.println(jdbcRs.getString(1) + "\t" + jdbcRs.getString(2)); } } } public static void main(String args[]) throws Exception{ JdbcRowSetTest jdbcRowSetTest = new JdbcRowSetTest(); jdbcRowSetTest.iniParam("mysql.ini"); jdbcRowSetTest.update("select * from students;"); } } //执行程序之后,看到以下运行结果 // S3 Tom // S2 Marry // S0 Smith
这是我看李刚编著的《疯狂Java讲义》后总结出来的。
java数据库编程(9) RowSet
最新推荐文章于 2021-12-15 11:17:21 发布