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

时间: 2024-11-08 23:33:52

Jdbc进阶(三)的相关文章

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

Python爬虫进阶三之Scrapy框架安装配置

初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/latest/intro/install.html,最权威哒,下面是我的亲身体验过程. 1.安装Python 安装过程我就不多说啦,我的电

3. 蛤蟆的数据结构进阶三静态查询之折半查询

3. 蛤蟆的数据结构进阶三静态查询之折半查询 本篇名言:"但是话不行,要紧的是做. --鲁迅" 继续来看静态查询的折半查询. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47211637 1.  折半查找 折半查找要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或隆序)排列,也就是说折半查找只适用于对有序顺序表进行查找. 折半查找的基本思想是:首先以整个查找表作为查找范围,用查找条件中给定值k与中间位置

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

Java进阶(三十五)java int与integer的区别

Java进阶(三十五)java int与integer的区别 前言 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1; Integer i= new In

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

Java进阶(三十一) Web服务调用

Java进阶(三十一) Web服务调用 前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd503-68fc-4406-b8f2-5e90095be303/19b67e36aa2ccd19 查看代码之后,按照以往的服务调用方法实现,结果无法实现.很是费解,求教大师兄之后,问题,迎刃而解,只能说自己需要学习的地方还有很多. 完整代码如下: package plan.http.util; imp