******************可滚动、可更新的结果集*****************
1.可滚动的结果集
JDK1.4之前默认打开的结果集不可随意滚动,如果想让结果集可以实现前后滚动等需要额外添加参数,从JDK5.0开始默认打开的结果集可以实现滚动,可以用next、absolute、previouse、beforeFirst、first、last、afterLas移动结果集的指针,这种结果集叫做可滚动的结果集.
2.可更新的结果集JDK5.0默认打开的结果集是不可更新的,如果想打开可更新的结果集需要创建通道的时候为通道指定 参数
演示代码:
package com.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import com.dao.inter.CategoryDao;
import com.util.ConnOracle;import com.vo.Category;public class CategoryDaoImpl implements CategoryDao {
//1.组合Connection
private Connection conn; public CategoryDaoImpl(){ conn = ConnOracle.getConnection(); } public void testScrollAndUpdateResultSet(String sql){ Statement stmt = null; ResultSet rs = null; //三.建立通道 try { //TYPE_FORWARD_ONLY(只能向前滚动),它是jdk1.4以前的默认值 //TYPE_SCROLL_INSENSITIVE(可自由滚动 可滚动的结果集),但是底层数据的改变不会影响ResultSet的内容 //TYPE_SCROLL_SENSITIVE(可自由滚动 可滚动的结果集),但是底层数据的改变 会 影响ResultSet的内容 stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); rs.last(); int rowCount = rs.getRow(); System.out.println("总的记录数:" + rowCount); for(int i=rowCount;i>0;i--){ rs.absolute(i); System.out.println("编号:" + rs.getInt(1) + ",名称:" + rs.getString(2) + ",描述:" + rs.getString(3)); rs.updateString(3, "描述" + i); //提交修改 rs.updateRow(); } } catch (SQLException e) { System.out.println("建立通道失败"); e.printStackTrace(); }finally{ //五.关闭 ConnOracle.closeConnection(rs, stmt, conn); } }public static void main(String[] args) { CategoryDaoImpl dao = new CategoryDaoImpl(); String sql = "select cid,cname,cdesc from category"; dao.testScrollAndUpdateResultSet(sql); }}
注意: 如果想使用可更新的结果集,必须要在查询语句中显示的查询带主键的字段,
如果使用select * from category代替会报错,报错如下.因为更新需要根据主键更新
总的记录数:3
编号:3,名称:图书音像,描述:333建立通道失败java.sql.SQLException: 对只读结果集的无效操作: updateString at oracle.jdbc.driver.BaseResultSet.updateString(BaseResultSet.java:419) at com.dao.impl.CategoryDaoImpl.testScrollAndUpdateResultSet(CategoryDaoImpl.java:222) at com.dao.impl.CategoryDaoImpl.main(CategoryDaoImpl.java:242)
******************************使用ResultSetMetaData分析结果集******************************
可以获得表的字段信息 MetaData 元数据 除了核心数据意外的数据叫做元数据
**********************************JDBC操作事务**********************************
事务 : 一系列sql语句的集合,要么都执行、要么都不执行
事务的起点:开始于第一条DML语句
事务结束于:
1. commit 或 rollback
2. DDL或DCL以后 之前的事务会自动提交 3. 用户正常退出 事务自动提交、 异常退出事务自动回滚
演示转账:
代码参照JDBC进阶.doc教案
**********************************带保存点的事务**********************************
一.oracle中保存点实现
insert
insertsavepoint sp;--设置保存点insert
rollback to sp;
二.JDBC中保存点实现 1.设置保存点 Savepoint savepoint = conn.setSavepoint(); 2.回滚到指定保存点 conn.rollback(savepoint)