一、ResultSet的高级特性

1 可滚动ResultSet

1)向前和向后滚动

滚动特性

在JDBC初期版本号中, ResultSet仅能向前滚动

在JDBC兴许版本号中, ResultSet默认能向前滚动或前后滚动

迟缓滚动:记录集可前后滚动。不受数据库数据更新影响

灵敏滚动:记录集可前后滚动,受数据库数据更新影响

由结果集类型设定

con.createStatement()

con.createStatement(结果集类型, 结果集并发类型)

con.createStatement(结果集类型, 结果集并发类型,结果集可保存性)

结果集特性设置:

语法
Statement  stm = con.createStatement(int  resultSetType, int resultSetConcurrency,int  resultSetHoldability);
演示样例:
//默认能够前后滚动。记录集类型:受数据库数据改动影响。
//结果集并发类型:能够更新的并发类型
//结果集可保存性:当前事务提交时结果集被关闭
Statement  stm = con. createStatement(
    ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE,
    ResultSet.CLOSE_CURSORS_AT_COMMIT);
ResultSet  rs = stm.executeQuery(“select  *  from  student”);

ResultSet结果集类型。结果集并发类型。结果集可保存性特性对PreparedStatament及CallableStatement相同适用
con.prepareStatement(SQL,结果集类型, 结果集并发类型)
con.prepareStatement(SQL。结果集类型, 结果集并发类型,结果集可保存性)

con.prepareCall(SQL。结果集类型, 结果集并发类型)
con.prepareCall(SQL。结果集类型, 结果集并发类型,结果集可保存性)

2 ResultSet定位

1)让游标指向某一行数据
   2)结果集支持相对定位和绝对定位

结果集定位就是使游标指向记录集中的某一行数据

ResultSet支持绝对和相对定位

使用absolute()和next()方法进行游标定位

演示样例

sql="select id,name,password,age from person";
rs=stmt.executeQuery(sql);
while(rs.next()){……..}     //从第一行前開始向下移动

rs.absolute(5);       //不管原来指向哪里。直接指向第五行

结果集定位的方法:

3 可更新ResultSet

1)结果集存放查询结果,默认不可更新
   2)通过connection获得statement对象时可设置參数决定是否可通过结果集更新数据

结果集存放查询结果,默认不可更新

通过connection获得statement对象时可设置结果集并发类型參数决定是否可通过结果集更新数据

假设结果集并发类型设置为CONCUR_UPDATABLE就能够通过结果集改动数据

设置后。能够在结果集中对数据进行更新、删除和插入

使用结果集改动数据时,先定位光标位置然后运行更新、删除或插入数据

更新行:

语法
resultSetVar.updateXXX(columnIndex, value);
resultSetVar.updateXXX(“columnName”,value);
resultSetVar.updateRow();   //两个方法要配合使用
cancelRowUpdates();   //取消更新。必须在updateRow()之前使用
演示样例
sql="select id,name,password,age from person";
rs=stmt.executeQuery(sql);
rs.last();      //定位
rs.updateString("name",“oracle");
rs.updateString(3,“oracle”);    //updateXXX()方法
rs.updateInt(“age”,21);   //这些update方法不会更新底层数据库
rs.updateRow();     //更新底层数据库

删除行:

语法
resultSetVar.deleteRow();
演示样例
sql="select id,name,password,age from person";
rs=stmt.executeQuery(sql);
rs.absolute(10);     //将指针定位到相应的行
rs.deleteRow();      //删除当前行数据。同一时候删除底层数据库数据

插入新行:

语法
resultSetVar.moveToInsertRow();
resultSetVar.updateXXX(columnIndex, value);
resultSetVar.updateXXX(“columnName”, value);
resultSetVar.insertRow();
演示样例
rs.moveToInsertRow();    //记住指针位置
rs.updateString(2, “Rose”);
rs.updateString(“password”, “Rose”);
rs.updateInt(“age”, 11);
rs.insertRow();       //插入数据,更新底层数据库
rs.moveToCurrentRow();  //将指针移动到记住的指针位置

可更新结果集的要求:

不是全部结果集都能更新

可更新的结果集必须满足下面条件

查询仅仅引用了一个数据表
查询不包括不论什么联接操作
查询结果中包括主键
查询结果全部列不可为空。没有默认值


二、批量更新

1 Statement批量更新

语法:
Statement stm = con.createStatement();
stm.addBatch(sqlString); stm.addBatch(sqlString);……
stm.executeBatch();
演示样例:
con.setAutoCommit(false);       //设置事务非自己主动提交
Statement stm = con.createStatement();
stm.addBatch(“insert into t_user(id, name, password) values(11, ‘Rose’, ‘Rose’)”);
stm.addBatch (“insert into t_user(id, name, password) values(12, ‘Mary’, ‘Mary’)”);
int[] results = stm.executeBatch();      //提交运行
con.commit();                //提交事务。使更改成为持久更改

批量更新一定要将事务提交设为非自己主动提交

con.setAutoCommit(false);
con.commit();
Statement的executeBatch()方法提交多个命令到数据库运行。返回每一个命令更新行数所组成的数组
假设批量更新中的某些命令无法正确运行,则会抛出 BatchUpdateException异常
BatchUpdateException的getUpdateCounts()方法能够返回发生此异常之前批量更新中成功运行的每一个更新语句的更新计数组成的数组

2  PreparedStatement批量更新

PreparedStatement预编译SQL语句。传入參数后运行
PreparedStatement批处理将传入的參数批量送入数据库运行相应的SQL语句

语法:
PreparedStatement  pstm = con.prepareStatement(sqlString);
pstm.setXXX(..);  pstm.addBatch(); 
pstm.setXXX(..);  pstm.addBatch();
pstm.excuteBatch();
演示样例
con.setAutoCommit(false);
PreparedStatement pstm = con.prepareStatement(“insert into t_user(name) values(?)”);
pstm.setString(1, “Rose”); pstm.addBatch();
pstm.setString(1, “John”); pstm.addBatch();
pstm.setString(1, “Mary”); pstm.addBatch();
int[] counts = pstm.excuteBatch(); con.commit();

3 CallableStatement批量更新

CallableStatement处理数据库储存过程

CallableStatement接口继承PreparedStatement接口

相关批处理方法是从PreparedStatement接口继承而来

CallableStatement批处理与PreparedStatement批处理模式同样

将传入的參数批量送入数据库运行相应的存储过程

转载于:https://www.cnblogs.com/lxjshuju/p/7106360.html

JDBC高级特性(一)结果集,批量更新相关推荐

  1. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  2. JDBC高级特性3--JNDI,连接池,分布式事务

    2019独角兽企业重金招聘Python工程师标准>>> System.out.print(rs.getInt(1)+"\t"); System.out.print ...

  3. JAVA怎么批量更新mysql_java 关于批量更新操作的实现

    批量更新操作 批量更新逻辑: 底层真正的批量更新(一次请求发送批量更新语句) 底层循环发送语句(假批量更新)-本质上就是一条一条更新 批量更新逻辑判断 JdbcTemplate JdbcUtils.s ...

  4. jdbc批量更新_用集算器更新数据库的技巧

    对数据库进行批量更新时,使用update函数要比execute函数性能更好. 比如,source和target是两个不同的数据源,callrecordA是source中的物理表,有1万条记录,call ...

  5. java批量事物管理_[疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性: 2) 设想一个银行转账的过程,如果分两步,第一步是A的账户-1000,第二步是B的账户+1000,这两个动作必须是连贯的, ...

  6. [疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性: 2) 设想一个银行转账的过程,如果分两步,第一步是A的账户-1000,第二步是B的账户+1000,这两个动作必须是连贯的, ...

  7. 头歌Educoder——Java高级特性 - JDBC(上)

    第1关:JDBC连接数据库 任务描述 本关任务:使用jdbc连接数据库并完成创建数据库和创建表的操作. 相关知识 JDBC API提供以下接口和类: DriverManager:此类管理数据库驱动程序 ...

  8. JAVA基础知识之JDBC——JDBC事务处理及批量更新

    JDBC事务 JDBC的事务由Connection提供,默认是打开的. 要开启事务,则要关闭自动提交, 1 conn.setAutoCommit(false); 提交事务使用 1 conn.commi ...

  9. oracle 批量更新_用集算器更新数据库的技巧

    对数据库进行批量更新时,使用update函数要比execute函数性能更好. 比如,source和target是两个不同的数据源,callrecordA是source中的物理表,有1万条记录,call ...

最新文章

  1. PHP多种序列化/反序列化的方法(serialize和unserialize函数)
  2. Android—TableLayout自定义表格
  3. 如何深拷贝一个对象数组?
  4. find vba 模糊_VBA积木代码方案:实现多重查找、模糊查找、清除值
  5. mysql临时表的的理解,如何理解存储过程中已存在的mysql临时表?
  6. 目标检测第4步:显卡、GPU、CUDA、cuDNN的介绍及如何在Windows 10下安装cuDNN?
  7. Python学习笔记之Windows下通过pip安装PyMySQL
  8. 密码可见_无密码身份认证即将来临
  9. plsql导出表结构_mysqldump命令详解 Part 5-按条件备份表数据
  10. Android使用HttpURLConnection下载图片
  11. 吴裕雄--天生自然 PHP开发学习:MySQL 插入数据
  12. 5G 时代,微软又走对了一步棋!
  13. 新华三模拟器IRF配置
  14. DataWorks 数据质量V2.3版本发布
  15. 杭电oj2035c语言答案,小白详细讲解快速幂--杭电oj2035-A^B
  16. ubuntu dock栏添加应用启动图标
  17. 邯郸市计算机中专学校地址,邯郸蓝天信息工程中专学校
  18. java-net-php-python-64jspm自主学习试题库系统录像演示2019查重计算机毕业设计程序
  19. 存储结构的定义及其分类
  20. 程序员必读:摸清hash表的脾性

热门文章

  1. Python入门--第三方模块的安装与使用,pip,import
  2. 操作系统—基本地址变换机构
  3. [leetcode]227. 基本计算器 II
  4. [leetcode周赛] 1349. 参加考试的最大学生数
  5. Thread源码-----传实现了Runnable接口的类的实例给Thread的作用
  6. HBase Region 自动拆分策略
  7. c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
  8. c#软件操作-cmd命令全解
  9. Quartus17运行仿真RTL Simulation
  10. 关于VB.NET 菜单栏ToolStripMenu 下拉菜单单选功能的实现