JDBC结果集
SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中。 SELECT
语句用于从数据库中选择行并在结果集中查看它们的标准方法。 java.sql.ResultSet
接口表示数据库查询的结果集。
ResultSet
对象维护指向结果集中当前行的游标。 术语“结果集”是指包含在ResultSet
对象中的行和列数据。
ResultSet
接口的方法可以分为三类:
- 浏览方法:用于移动光标。
- 获取方法:用于查看光标指向的当前行的列中的数据。
- 更新方法:用于更新当前行的列中的数据。 然后在基础数据库中更新数据。
光标可以基于ResultSet
的属性移动。当创建生成ResultSet
的相应Statement
时,将指定这些属性。
JDBC提供以下连接方法来创建具有所需ResultSet
的语句 -
createStatement(int RSType, int RSConcurrency);
prepareStatement(String SQL, int RSType, int RSConcurrency);
prepareCall(String sql, int RSType, int RSConcurrency);
第一个参数表示ResultSet
对象的类型,第二个参数是两个ResultSet
常量之一,用于指定结果集是只读还是可更新。
ResultSet类型
可能的RSType
值如下。如果不指定任何ResultSet
类型,将自动分配一个TYPE_FORWARD_ONLY
值。
类型 | 描述 |
---|---|
ResultSet.TYPE_FORWARD_ONLY |
光标只能在结果集中向前移动。 |
ResultSet.TYPE_SCROLL_INSENSITIVE |
光标可以向前和向后滚动,结果集对创建结果集后发生的数据库所做的更改不敏感。 |
ResultSet.TYPE_SCROLL_SENSITIVE |
光标可以向前和向后滚动,结果集对创建结果集之后发生的其他数据库的更改敏感。 |
ResultSet的并发性
可能的RSConcurrency
如下。 如果不指定任何并发类型,将自动获得一个CONCUR_READ_ONLY
值。
并发 | 描述 |
---|---|
ResultSet.CONCUR_READ_ONLY |
创建只读结果集,这是默认值。 |
ResultSet.CONCUR_UPDATABLE |
创建可更新的结果集 |
到目前为止我们写的所有例子可以写成如下,它初始化一个Statement
对象来创建一个只向前的只读ResultSet
对象 -
try {
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
....
}
finally {
....
}
浏览结果集
ResultSet
接口中有几种涉及移动光标的方法,包括 -
编号 | 方法 | 描述 |
---|---|---|
1 | public void beforeFirst() throws SQLException |
将光标移动到第一行之前 |
2 | public void afterLast() throws SQLException |
将光标移动到最后一行之后。 |
3 | public boolean first() throws SQLException |
将光标移动到第一行。 |
4 | public void last() throws SQLException |
将光标移动到最后一行。 |
5 | public boolean absolute(int row) throws SQLException |
将光标移动到指定的行。 |
6 | public boolean relative(int row) throws SQLException |
从当前指向的位置,将光标向前或向后移动给定行数。 |
7 | public boolean previous() throws SQLException |
将光标移动到上一行。 如果上一行关闭结果集,此方法返回false 。 |
8 | public boolean next() throws SQLException |
将光标移动到下一行。 如果结果集中没有更多行,则此方法返回false 。 |
9 | public int getRow() throws SQLException |
返回光标指向的行号。 |
10 | public void moveToInsertRow() throws SQLException |
将光标移动到结果集中的特殊行,该行可用于将新行插入数据库。当前光标位置被记住。 |
11 | public void moveToCurrentRow() throws SQLException |
如果光标当前位于插入行,则将光标移回当前行; 否则,此方法什么也不做 |
为了更好的理解,建议学习浏览记录示例代码。
查看结果集
ResultSet
接口包含数十种获取当前行数据的方法。
每个可能的数据类型都有一个get
方法,每个get
方法有两个版本 -
- 一个是采用列名称。
- 另一个采用列索引。
例如,如果对查看感兴趣的列包含一个int
,则需要使用ResultSet
的其中一个getInt()
方法 -
序号 | 方法 | 描述 |
---|---|---|
1 | public int getInt(String columnName) throws SQLException |
返回名为columnName 的列中当前行中的int 值。 |
2 | public int getInt(int columnIndex) throws SQLException |
返回指定列索引当前行中的int 值。列索引从1 开始,意味着行的第一列为1 ,行的第二列为2 ,依此类推。 |
类似地,在八个Java基元类型中的每一个的ResultSet
接口中都有get
方法,以及常见的类型,如java.lang.String
,java.lang.Object
和java.net.URL
等。
还有一些方法可以获取SQL数据类型java.sql.Date,java.sql.Time
,java.sql.TimeStamp
,java.sql.Clob
和java.sql.Blob
。查看文档以获取有关使用这些SQL数据类型的更多信息。
为了更好的理解,建议学习研究查看结果集示例代码
更新结果集
ResultSet
接口包含用于更新结果集的数据的更新方法的集合。
与get方法一样,每种数据类型都有两种更新方法 -
- 一个是采用列名称。
- 另一个采用列索引。
例如,要更新结果集当前行的String
列,可以使用以下updateString()
方法之一:
序号 | 方法 | 描述 |
---|---|---|
1 | public void updateString(int columnIndex, String s) throws SQLException |
将指定列中的String 值更改为指定的s 值。 |
2 | public void updateString(String columnName, String s) throws SQLException |
与前前的方法类似,除了使用列的名称而不是列的索引指定。 |
有八种基本数据类型的更新方法,以及java.sql
包中的String
,Object
,URL
和SQL数据类型。
更新结果集中的一行会更改ResultSet
对象中当前行的列,但不会更改底层数据库中的列的值。 要更新数据库中的行,需要调用以下方法之一。
序号 | 方法 | 描述 |
---|---|---|
1 | public void updateRow() |
更新数据库中当前行 |
2 | public void deleteRow() |
从数据库中删除当前行 |
3 | public void refreshRow() |
刷新结果集中的数据以反映数据库中最近的任何更改。 |
4 | public void cancelRowUpdates() |
取消对当前行所做的任何更新。 |
5 | public void insertRow() |
在数据库中插入一行。 只有当光标指向插入行时,才能调用此方法。 |
为了更好的理解,建议您学习研究“更新结果集示例代码”
JDBC结果集的更多相关文章
- JDBC结果集rs.next()注意事项
写在前面: 用JDBC从数据库中查询数据要用到结果集ResultSet,其中我们在获取结果的时候经常用到rs.next()方法来判断是否查询到了数据. 但是要特别注意,next()方法用一次,游标就往 ...
- JDBC资料集
1.基本的JDBC概念: http://dev.mysql.com/doc/refman/5.1/zh/connectors.html#cj-basic-jdbc 2.JSP&Servlet学 ...
- Java JDBC结果集的处理
结果集指针的移动 while (resultSet.next()){ //...... } 指针最初指向第一条记录之前,next()是指向下一个位置,返回的是boolean值,true表示有内容(记录 ...
- SHDP--Working With HBase (二)之HBase JDBC驱动Phoenix与SpringJDBCTemplate的集成
Phoenix:Phoenix将SQL查询语句转换成多个scan操作,并编排执行最终生成标准的JDBC结果集. Spring将数据库访问的样式代码提取到JDBC模板类中,JDBC模板还承担了资源管 ...
- Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成
介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...
- JDBC 接口学习
说明:文章所有内容皆选自实验楼教程[JDBC 入门教程],想要学习更多JDBC,可以点击教程进行学习~ JDBC 简介 JDBC 的全称是 Java Database Connectivity,叫做 ...
- spring+activity+mysql集群
第一步:先配置好第一个activityMQ 在broker外面加入数据库的连接信息,并将mysql的mysql-connector-java.jar,即java连接mysql的jar包放入apach ...
- JDBC——入门知识【转】
1. 什么是JDBC:Java数据库连接性(JavaDatabase Connectivity) API,允许用户从Java应用程序中访问任何表格化数据源. 2. JDBC除了提供到更宽范围的SQ ...
- Java JDBC 基础
JDBC API 包含以下几个核心部分: 1:JDBC 驱动 2:Connections (连接) 3:Statements (声明) 4:Result Sets (结果集) JDBC: 打开数据库连 ...
随机推荐
- update set where exists 多表更新 在mssql、MySQL、Oracle中分别用法
MySQL: UPDATE ChgCfm t1 INNER JOIN tb_dz_file t2 ON t1.ID = t2.ID ' SQLserver: FROM ChgCfmRcd t1 ' F ...
- HTTPS演变小图
HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证这些隐私数据能加密传输,网景公司设计了SSL(Se ...
- (原创)sqlite封装库SmartDB1.3发布
最近终于稍微有点空对SmartDB进行升级了,SmartDB1.3比之前的版本做了简化,增强了易用性和灵活性. SmartDB对sqlite做了一层封装,屏蔽了诸多细节,使得我们使用起来很方便.在注重 ...
- Ctex中WinEdt经常弹出注册小窗口 解决办法
使用WinEdt 7避免跳出“注册对话框” 在options菜单下点options…,在advanced configuration => Event Handlers 下点Exit, 在 ...
- mysql_secure_installation
安装完mysql-server 会提示可以运行mysql_secure_installation.运行mysql_secure_installation会执行几个设置: a)为root用户设置密码 ...
- [DIOCP3-说明书] 关于DEMO的编译
总有些朋友问我,关于DEMO编译的一些问题,每次都回答大概都差不多,我想还是写篇说明书给大家,关于DEMO编译的步骤. [环境设定] 1.将DIOCP3\source路径添加到Delphi的搜索路 ...
- dovecot--查询未读邮件个数
最近负责的邮箱系统项目中有一个这样的需求:提供一个接口给业务层,可以通过邮箱查询到该用户的未读邮件个数. 之前的方案是通过查看用户目录下.INBOX/new目录中的文件个数,但是这个方法不准确,当有用 ...
- 【神经网络】LSTM 网络
Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息.LSTM 由Hochreiter & Schmidhuber (199 ...
- 6. EM算法-高斯混合模型GMM+Lasso详细代码实现
1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...
- 4. 文本相似度计算-CNN-DSSM算法
1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 1. 前言 之前介绍了DSSM算法,它主要是用了DN ...