博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jdbc进阶(三)
阅读量:5368 次
发布时间:2019-06-15

本文共 2811 字,大约阅读时间需要 9 分钟。

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

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

你可能感兴趣的文章
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
Python/jquery
查看>>
【BZOJ】【2132】圈地计划
查看>>
Java有没有goto?
查看>>
求不相邻金币相加和的最大值--动态规划1
查看>>
[转][osg]探索未知种族之osg类生物【目录】
查看>>
四十九. Zabbix报警机制 、 Zabbix进阶操作 、 监控案例
查看>>
元类中__new__ 与 __init__的区别--day27
查看>>
占小狼的简书博客
查看>>
struts2__action执行顺序
查看>>
php异常处理
查看>>
[xampp] /usr/bin/env: php: No such file or directory
查看>>
细学PHP 10 贴吧-2
查看>>
黑客攻防入门秘籍
查看>>
Swift迎来了1.0 GM 版(2014.09.09)
查看>>
【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查...
查看>>
《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
查看>>
Java 编程下实现随机无重复数字功能
查看>>
Android 编程下的代码混淆
查看>>