JDBC API 可滚动可编辑的结果集
JDBC的API中的链接数据和创建statement并且执行读取ResultSet大家已经很熟悉了,这边介绍设置statement的属性使结果集可以移动并且进行编辑同步回数据库。
Statement 有两个属性分别用来设置结果集ResultSet是否可以滚动以及是否可以编辑同步回数据库。

图片来自《java核心技术卷II-高级特性》,推荐阅读。
具体使用上代码:
try (Connection connection = DriverManager.getConnection(url, username, password)) {
System.out.println("数据库链接成功!");
try (Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
String command = "insert into a_dept(name) values('1'),('2')";
int count = statement.executeUpdate(command);
System.out.println("受影响行数:" + count);
String selectSql = "select * from a_dept";
try (ResultSet resultSet = statement.executeQuery(selectSql)) {
while (resultSet.next()) {
System.out.print("修改前id " + resultSet.getInt("id") + "的值是: ");
System.out.println(resultSet.getString("name"));
resultSet.updateString("name", "我是修改过的");
resultSet.updateRow();
System.out.print("修改后id " + resultSet.getInt("id") + "的值是: ");
System.out.println(resultSet.getString("name"));
}
resultSet.moveToInsertRow();
resultSet.updateString("name", "我是插入的");
resultSet.insertRow();
resultSet.beforeFirst();
System.out.println("打印出所有的值:");
while (resultSet.next()) {
System.out.print(resultSet.getInt("id") + ": ");
System.out.println(resultSet.getString("name"));
}
}
}
}
再贴上输出结果:

显而易见,从数据库取出的值在ResultSet中就被修改了,并且也被插入了一条新的数据。
1、在最后打印出所有的值之前有一行代码
resultSet.beforeFirst();
这行代码的作用是把ResultSet的游标移动到结果集第一行之前,这样子调用next()方法可以让游标下移进行读取下一行的数据。显而易见,在设置ResultSet.TYPE_SCROLL_SENSITIVE之前我们访问结果集只能够从头到尾访问,而现在我们可以随意的异动游标访问任一行.
2、再看修改数据的那一段代码,
resultSet.updateString("name", "我是修改过的");
resultSet.updateRow();
我们修改数据是使用updateXXX()方法进行修改,相应的还有updateInt()、updateBytes()、updateTime()等相对应的方法。
而在修改完成之后需要调用updateRow()方法,该方法会提交我们对这一行结果集的修改,需要注意的是如果我们没有提交对这一行的修改而继续访问下一行,那我们的修改就会作废。
3、看插入数据的那一段代码:
resultSet.moveToInsertRow();
resultSet.updateString("name", "我是插入的");
resultSet.insertRow();
执行插入操作的话需要先调用 moveToInsertRow() 方法把游标移动到特定的位置(我们无法控制插入的位置),之后再执行插入操作插入需要插入的column(我设计的表只有两个column:id和name,id是自动增长的,所以我只需要插入name)
在插入需要插入的column之后,需要调用insertRow()方法将新建的行发送给数据库,这才算是完成了插入操作。
4、我们其实还可以使用deleteRow()方法来进行删除当前游标所指定的行。
JDBC API 可滚动可编辑的结果集的更多相关文章
- JavaWeb学习之JDBC API中常用的接口和类
JDBC API中包含四个常用的接口和一个类分别是: 1.Connection接口 2.Statement接口 3.PreparedStatement接口 4.ResultSet接口 5.Driver ...
- JDBC API 事务的实践
使用了持久化框架几乎没有使用过原生的jdbc API ,发现原来使用jdbc API来实现事务也是很简单的. 数据库的链接connection具有一个属性autocommit,这个属性默认是true, ...
- JDBC API访问数据库的基本步骤。
JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...
- Spring中的JDBC API
1 JdbcTemplate的诞生 JDBC作为Java平台访问关系数据库的标准API,其成功是有目共睹的.为了避免在JDBC API在使用中的种种尴尬局面(几乎程式一样的代码,繁琐的异常处理),Sp ...
- JDBC API阐述
JDBC API JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果. Driver 接口 Java.sql.Driver 接口是所有 JDBC 驱动 ...
- JDBC API Description
package java.sql description What the JDBCTM 4.2 API Includes Versions What the java.sql Package Con ...
- RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK
1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动IOS版RDVECore"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率 ...
- jdbc调用存储过程获取多个结果集
jdbc调用存储过程获取多个结果集 2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- 数据库程序接口——JDBC——API解读第三篇——处理结果集的核心对象
核心对象 处理结果集的核心对象有ResultSet和RowSet.其中ResultSet指定关系型数据库的结果集,RowSet更为抽象,凡是由行列组成的数据都可以. ResultSet ResultS ...
随机推荐
- 第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)
一. 什么是事务 我们通俗的理解事务就是一系列操作要么全部成功.要么全部失败(不可能存在部分成功,部分失败的情况). 举一个事务在我们日常生活中的经典例子:两张银行卡(甲.乙),甲向乙转钱,整个过程需 ...
- MySQL关于日志配置安全整改及处理方法
[环境介绍] 系统环境:Linux + mysql 5.7.18 + 主从复制架构 [背景描述] 需求:MySQL数据库都有每年的集团安全整改,常常要求弱口令扫描,基线扫描,漏洞扫描等等.对于MySQ ...
- Resources (being shared)
论文下载求助论坛 数学杂志的模版 答辩PPT模版 发一篇文章的经历 数学期刊名称缩写 英文书籍下载 英文书籍下载 中文书籍下载 数学分析高等代数考研试题官方下载地址
- Coroutine的原理以及实现
最近在写WinForm,在UI界面需要用到异步的操作,比如加载数据的同时刷系进度条,WinForm提供了不少多线程的操作, 但是多线程里,无法直接修改主线程里添加的UI的get/set属性访问器(可以 ...
- Python“函数式编程”中常用的函数
1.map(func,seq[,seq,...]) 对序列中的每个元素应用函数,python2中map()返回的是列表,python3中返回的是迭代器,可以用list()转换成列表.以下例子为pyth ...
- Notepad++ --v7.5.8 (64bit) 安装目录显示插件(Explorer)
https://blog.csdn.net/qq_24153697/article/details/83036761 最近想自己做一个小项目,用Notepad做IDE,但是发现已安装的Notepad没 ...
- 树链剖分详解(洛谷模板 P3384)
洛谷·[模板]树链剖分 写在前面 首先,在学树链剖分之前最好先把 LCA.树形DP.DFS序 这三个知识点学了 emm还有必备的 链式前向星.线段树 也要先学了. 如果这三个知识点没掌握好的话,树链剖 ...
- 拆系数FFT及其部分优化
模拟考某题一开始由于校内OJ太慢直接拆系数FFT跑不过 后来被神仙婊了一顿之后发现复杂度写炸了改了改随便过 模版题:任意模数NTT 三模数NTT 常数巨大,跑的极慢 拆系数FFT 原理是对于两个多项式 ...
- 对Java框架spring、hibernate、Struts的粗浅理解
对 Struts 的理解:1. struts 是一个按 MVC 模式设计的 Web 层框架,其实它就是一个大大的 servlet,这个Servlet 名为 ActionServlet,或是 Actio ...
- vue中html模板使用绑定的全局函数
我们知道在script中使用vue绑定的全局函数时, 我们需要用这种方式使用: this.Util.Fun(e) 那在模板中, 比如v-if中想使用Fun函数怎么办呢?你应该这样做 <i v-i ...