JDBC——ResultSet

1 概述

SQL语句执行后从数据库查询读取数据,返回的数据放在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);

1.1 RSType

类型描述
ResultSet.TYPE_FORWARD_ONLY光标只能在结果集中向前移动(默认)
ResultSet.TYPE_SCROLL_INSENSITIVE光标可以向前和向后滚动,结果集对创建结果集后发生的数据库所做的更改不敏感。
ResultSet.TYPE_SCROLL_SENSITIVE光标可以向前和向后滚动,结果集对创建结果集之后发生的其他数据库的更改敏感。

1.2 RSConcurrency

并发描述
ResultSet.CONCUR_READ_ONLY创建只读结果集,默认。
ResultSet.CONCUR_UPDATABLE创建可更新的结果集

2 浏览结果集

方法描述
void beforeFirst()将光标移动到第一行之前
void afterLast()将光标移动到最后一行之后。
boolean first()将光标移动到第一行。
void last()将光标移动到最后一行。
boolean absolute(int row)将光标移动到指定的行。
relative(int row)从当前指向的位置,将光标向前或向后移动给定行数。
boolean previous()将光标移动到上一行。
boolean next()将光标移动到下一行。
int getRow()返回光标指向的行号。
void moveToInsertRow()将光标移动到结果集中的特殊行,该行可用于将新行插入数据库。当前光标位置被记住。
void moveToCurrentRow()如果光标当前位于插入行,则将光标移回当前行; 否则,此方法什么也不做

3 查看结果集

方法功能
int getInt(String columnName)返回名为columnName的列中当前行中的int值。
int getInt(int columnIndex)返回指定列索引当前行中的int值。列索引从1开始

每个可能的数据类型都有一个get方法,每个get方法有两个版本:采用类名称和列索引。

在八个Java基本类型中的每一个ResultSet接口中都有get方法,以及常用的类型。如java.lang.String,java.lang.Ojbect和java.net.URL等。还有一些方法可以获取SQL数据类型:java.sql.Date,java.sql.Time,java.sql.TimeStamp,java.sql.Clob和java.sql.Blob等等

4 更新结果集

与get方法一样,每种数据类型都有两种更新方法:采用列名称和列索引。
更新结果集中的一行会更改ResultSet对象中当前行的列,但不会更改底层数据库中的列的值。要更新数据库中的行,需要调用以下方法之一。

方法描述
void updateRow()更新数据库中当前行
void deleteRow()从数据库中删除当前行
void refreshRow()刷新结果集中的数据以反映数据库中最近的任何更改。
void cancelRowUpdates()取消对当前行所做的任何更新。
void insertRow()在数据库中插入一行。 只有当光标指向插入行时,才能调用此方法

5 数据类型

SQL类型JDBC/Java类型setXXX
VARCHARStringsetString
CHARStringsetString
LONGVARCHARStringsetString
BITbooleansetBoolean
NUMERICBigDecimalsetBigDecimall
TINYINTbytesetByte
SMALLINTshortsetShort
INTEGERintsetInt
BIGINTlongsetLong
REALfloatsetFloat
FLOATfloatsetFloat
DOUBLEdoublesetDouble
VARBINARYbyte[ ]setBytes
BINARYbyte[ ]setBytes
DATEjava.sql.DatesetDate
TIMEjava.sql.TimesetTime
TIMESTAMPjava.sql.TimestampsetTimestamp
CLOBjava.sql.ClobsetClob
BLOBjava.sql.Blob setBlob
ARRAYjava.sql.ArraysetARRAY
REFjava.sql.RefsetRef
STRUCTjava.sql.StructsetStruct

5.1 处理NULL

  • SQL使用NULL值和Java使用null是不同的概念
  • 避免使用返回原始数据类型的getXXX()方法
  • 对原始数据类型使用包装类,并使用ResultSet对象的wasNull()方法来测试接收getXXX()方法的返回值的包装器类变量是否应该设置为null。
  • 使用原始数据类型和ResultSet对象的wasNull()方法来测试接收到由getXXX()方法返回的值的原始变量是否应设置为表示NULL的可接受值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值