JDBC 学习笔记(八)—— ResultSet
JDBC 使用 ResultSet 来封装 SQL 的查询结果,可以将 ResultSet 类比为数据库表的查询结果。
它拥有如下两个性质:
- 可滚动。
- 可更新。
这两个性质,是在创建 Statement 的时候决定的。
一般来说,我们使用以下 Connection 的方法创建 Statement:
- Statement createStatement() throws SQLException;
但实际上,Connection 还提供以下方法:
- Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
1. 可滚动
ResultSet 通过移动指针来取出结果集的内容。
以下方法的第一个参数,用来控制 ResultSet 的指针移动策略。
- Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
ResultSet 内部设置了3个常量值,来控制指针移动的策略:
- int TYPE_FORWARD_ONLY = 1003;
- int TYPE_SCROLL_INSENSITIVE = 1004;
- int TYPE_SCROLL_SENSITIVE = 1005;
- TYPE_FORWARD_ONLY,顾名思义,ResultSet 的指针只允许向后滚动,即只支持 next() 方法(SQLite 只支持这种模式)。
- TYPE_SCROLL_INSENSITIVE 和 TYPE_SCROLL_SENSITIVE,这两个方法都能够实现任意的前后滚动,使用各种移动的 ResultSet 指针的方法,区别在于两者对于修改数据的敏感性。(TYPE_SCROLL_SENSITIVE 仅针对已经取出来的记录的更改(update、delete)敏感,对新增(insert)的数据不敏感,部分数据库驱动,这两个常量没有太大区别)
ResultSet 提供了以下8个接口,来支持它可滚动的特性:
- // 向后滚动
- boolean next() throws SQLException;
- // 向前滚动
- boolean previous() throws SQLException;
- // 移动到相对当前行的第几行
- boolean relative( int rows ) throws SQLException;
- // 移动到整个 ResultSet 中的第几行
- boolean absolute( int row ) throws SQLException;
- // 移动到第一行
- boolean first() throws SQLException;
- // 移动到最后一行
- boolean last() throws SQLException;
- // 移动到第一行的前一行(没有数据)
- void beforeFirst() throws SQLException;
- // 移动到最后一行的后一行(没有数据)
- void afterLast() throws SQLException;
2. 可更新
以下方法的第二个参数,用来控制 ResultSet 的并发类型:
- Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
这个参数可以接收以下2个值:
- int CONCUR_READ_ONLY = 1007;
- int CONCUR_UPDATABLE = 1008;
- CONCUR_READ_ONLY 表示 ResultSet 是只读的并发模式(默认)。
- CONCUR_UPDATABLE 表示 ResultSet 是可更新的并发模式。
一旦将并发模式设置成 CONCUR_UPDATABLE,那么 JDBC API 就提供了一系列的 updateXxx(int columnIndex, Xxx value) 方法去更新 ResultSet 的数据。
这些数据的 UPDATE,会直接反应到数据库中。
3. Demo
最后贴一下 ResultSet 的示例代码:
- package com.gerrard.demo;
- import com.gerrard.entity.Student;
- import com.gerrard.util.Connector;
- import com.gerrard.util.DriverLoader;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public final class ResultSetDemo {
- public static void main(String[] args) {
- String sql = "SELECT * from STUDENT";
- DriverLoader.loadSqliteDriver();
- try (Connection conn = Connector.getSqlConnection();
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql)) {
- dealResultSet(rs);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- private static void dealResultSet(ResultSet rs) throws SQLException {
- while (rs.next()) {
- int id = rs.getInt(1);
- String name = rs.getString(2);
- String password = rs.getString(3);
- Student student = new Student(id, name, password);
- System.out.println(student);
- }
- }
- }
输出结果:
JDBC 学习笔记(八)—— ResultSet的更多相关文章
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- JDBC学习笔记一
JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- JDBC 学习笔记(六)—— PreparedStatement
1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
随机推荐
- SGU 258 Almost Lucky Numbers 接近幸运数(数位DP)
题意: 定义一个具有2n位的正整数,其前n位之和与后n位之和相等,则为lucky数.给定一个区间,问有多少个正数可以通过修改某一位数从而变成lucky数?注意不能含前导0. 思路: 我的想法是记录那些 ...
- BZOJ 1137: [POI2009]Wsp 岛屿 半平面交
1137: [POI2009]Wsp 岛屿 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 165 Solved: ...
- java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
今天写SpringMvc时,遇到这样一个问题: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config at org.sp ...
- UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
Input Each input set consists of a sequence of 52 integers separated by spaces and/or ends of line. ...
- String java
https://www.golinuxcloud.com/java-interview-questions-answers-experienced-2/ 75. What is the meaning ...
- 线程的sleep方法
- Makefile 编写实例
make命令常用的三个选项: 1.-k:它的作用是让make命令在发现错误的时候仍然继续执行.我们可以利用这个选项在一次操作中发现未编译成功的源文件. 2.-n:它的作用是让make命令输出将要执行的 ...
- java基础—static关键字
一.static关键字
- SpringMVC 项目中引用其他 Module 中的方法
1. 将要引用的Module 引入项目中 2. 在主Module中添加依赖, 3. 被引用的类必须放在 Module 中/src/下的某个package中,否则引用不到(重要)
- 详解wordpress如何把文件保存到阿里云OSS上!
自己搞了一个Wordpress的博客,装完之后一直晾着没管,最近闲来开荒.为了减小服务器的带宽.存储.CUP的压力,决定把博客中的所有文件都保存到阿里云OSS上面. 关于这个问题,自己去调用OSS的S ...