Jdbc进阶(三)

******************可滚动、可更新的结果集*****************

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
insert
savepoint sp;--设置保存点

insert

rollback to sp;


二.JDBC中保存点实现


1.设置保存点


Savepoint savepoint = conn.setSavepoint();


2.回滚到指定保存点


conn.rollback(savepoint)

 

转载于:https://www.cnblogs.com/MrTanJunCai/p/9907515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值