Jdbc进阶
Posted 菜菜小谭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于Jdbc进阶的主要内容,如果未能解决你的问题,请参考以下文章