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

摘要:
//结果集并发类型:可以更新的并发类型//结果集可保存性:当提交当前事务时,结果集为closeStatementstm=con。createStatement;结果集=stm。executeQuery;ResultSet结果集类型。结果集并发类型。结果集的可保存性特性与PreparedParameter和CallableStatement相同。适用于con.prepareStatementcon。prepareStatement(SQL.rs.absolute;//无论它最初指向何处。

一、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”);

JDBC高级特性(一)结果集,批量更新第1张

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);       //不管原来指向哪里。直接指向第五行

结果集定位的方法:

JDBC高级特性(一)结果集,批量更新第2张

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批处理模式同样

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


免责声明:文章转载自《JDBC高级特性(一)结果集,批量更新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jacoco统计自动化测试代码覆盖率CSS3 的视口单位vw、vh实现自适应(带有px,em,rem的简单介绍)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 数据库启动与关闭 各种方式详解整理

闲话: 近来要开始学Oracle了,平时遇到些什么不懂的总是要找谷歌度娘的,不过有些时候找到的内容却不是很衷意。嗨,看来我也别懒着了,收集些书上的网上的知识点到这里来方便以后用得着的时候查查吧,也方便大家参考参考(如果你觉得还满意的话)。以下内容以oracle 11g为例抄一本书上的,书名就懒得广告了。可能抄得太详细了,没必要的话看看命令也就罢了。 前言:...

SQLPrompt(可视化工具插件助手) 安装和破解

1、sqldbx工具介绍 在介绍SQL Prompt 5.3.4.1以前,先介绍另一款sql工具sqldbx。它也是一款拥有智能提示的sql编程工具,并且小巧灵活,支持多种类型的数据库(不只仅是SQL Server)。惟一的缺点就是它不支持中文,数据表中查询到的中文在这款工具的结果集中显示都是乱码的。总而言之,它也是一款可以提升sql编程效率的工具。编程...

麻雀虽小,五脏俱全。基于Asp.net core + Sqlite 5分钟快速上手一个小项目

虽然该方法不会用在实际开发中,但该过程对于初学者还是非常友好的,真应了麻雀虽小,五脏俱全这句话了。好了不多废话了,直接开始!! 1.建立一个名为test的Asp.net core web应用程序 这一部分的目的是建立项目,并使用MVC框架。 2.导入依赖项(sqlite数据库 与 EF core) 这一部分的操作目的是可以让我们的项目可以使用操作数据库的...

SQL 模糊查询

在进行数据库查询时,有完整查询和模糊查询之分。一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。比如 SELECT * FROM [user] WHERE u_...

weblogic9.0中数据源配置

安装完weblogic9.0后,按照上篇文章的做法,导入数据库的驱动jar包,用的依然是mysql数据库。1.启动weblogic服务;2.在浏览器中输入http://localhost:7001/console进入weblogic控制台,输入用户名和密码;3.点击左侧的lock&edit解锁;4.点击页面中间的JDBC下的Data Source;...

wordpress数据库优化wp_posts表 OPTIMIZE

wordpress数据库优化wp_posts表 对 MySQL 数据记录进行插入、更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间。就像具有碎片的磁盘,会降低性能,需要整理,因此要优化。 OPTIMIZE TABLE wp_posts;  参考自我爱水煮鱼...