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 可滚动可编辑的结果集的更多相关文章

  1. JavaWeb学习之JDBC API中常用的接口和类

    JDBC API中包含四个常用的接口和一个类分别是: 1.Connection接口 2.Statement接口 3.PreparedStatement接口 4.ResultSet接口 5.Driver ...

  2. JDBC API 事务的实践

    使用了持久化框架几乎没有使用过原生的jdbc API ,发现原来使用jdbc API来实现事务也是很简单的. 数据库的链接connection具有一个属性autocommit,这个属性默认是true, ...

  3. JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...

  4. Spring中的JDBC API

    1 JdbcTemplate的诞生 JDBC作为Java平台访问关系数据库的标准API,其成功是有目共睹的.为了避免在JDBC API在使用中的种种尴尬局面(几乎程式一样的代码,繁琐的异常处理),Sp ...

  5. JDBC API阐述

    JDBC API JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果. Driver 接口 Java.sql.Driver 接口是所有 JDBC 驱动 ...

  6. JDBC API Description

    package java.sql description What the JDBCTM 4.2 API Includes Versions What the java.sql Package Con ...

  7. RDVECore来自锐动的无UI,高度抽象化API的视频编辑SDK

    1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动IOS版RDVECore"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率 ...

  8. jdbc调用存储过程获取多个结果集

    jdbc调用存储过程获取多个结果集 2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  9. 数据库程序接口——JDBC——API解读第三篇——处理结果集的核心对象

    核心对象 处理结果集的核心对象有ResultSet和RowSet.其中ResultSet指定关系型数据库的结果集,RowSet更为抽象,凡是由行列组成的数据都可以. ResultSet ResultS ...

随机推荐

  1. MyBatis集成到Spring时配置MapperScannerConfigurer出错

    问题描述 在web项目中同时集成了spring mvc和mybatis. 将jdbc配置参数独立在外部配置文件中,然后通过<context:property-placeholder>引入. ...

  2. 高并发秒杀系统--Service接口设计与实现

    [DAO编写之后的总结] DAO层    -->    接口设计 + SQL编写 DAO拼接等逻辑    -->    统一在Service层完成 [Service层的接口设计] 1.接口 ...

  3. Vue导出json数据到Excel表格

    一.安装依赖 npm install file-saver --save npm install xlsx --save npm install script-loader --save-dev 二. ...

  4. WebService - 基础概念

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  5. if 语句中的判断

    经常写shell的朋友可能已经很熟了.有不同意见的同学请指出来,在这里多谢大家了. bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式: ...

  6. PowerDesigner的Table视图同时显示Code和Name的方法[转发]

    PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-Display Preference

  7. jsp注释<%-- --%>和<!-- -->的区别

    最近在写JSP页面注释的时候,遇到一个问题,在JSP页面引用的静态属性资源文件时,在浏览器控制台报错,当我把引用的标签注释掉后,用的是<!-- -->.然后浏览器仍然报了之前那个错,经过查 ...

  8. IEnumerable<T>和IQueryable<T>区别

    LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...

  9. MS SQL Server 查询元数据

    use test -- 查询数据库中所有的表和架构名称select SCHEMA_NAME(schema_id) as table_schema_name, name as table_name fr ...

  10. CentOS安装Supervisor

    什么是Supervisor Supervisor是一个进程控制系统. 它是一个C/S系统,服务端是supervisord进程,控制端使用supervisorctl来进行控制启动进程.同时它也提供了一个 ...