l 可滚动特性和可更新特性:
JDBC1.0中是指游标的移动的方向和方式是单向,单步(相对)移动,功能比较简单。
JDBC2.0中游标可以双向,相对或者绝对移动。
可滚动结果集:这种结果集不但可以双向滚动,相对定位,绝对定位,并且还可以修改数据信息。
1) 滚动特性:
定位函数:
boolean absolute(int row),定位到指定的记录位置。定位成功返回true,不成功返回false。
void afterLast(),把游标移动到最后一条记录的后面(逻辑位置)。
void beforeFirst(),把游标移动到第一条记录的前面(逻辑位置)。
//由于第一条记录的前面和最后一条记录的后面这两个位置肯定存在,所以无需判断是否存在,返回值设为void。
Boolean first(),把游标定位到第一条记录。
Boolean last(),把游标定位到最后一条记录。
//当结果集为空的时候,这两个方法会返回false。
Boolean next(),此方法是使游标向下一条记录移动。
Boolean previous(),此方法可以使游标向上一条记录移动,前提是前面还有记录。
Boolean relative(int rows),相对定位方法,参数值可正可负,参数为正,游标从当前位置向后移动指定值条记录,参数为负,游标从当前位置向前移动指定值条记录。
判断函数:
ifBeforeFirst()判断是否在第一条记录之前。
ifAfterLast()判断是否在最后一条记录之后。
ifFirst()判断是否为第一条记录。
ifLast()判断是否为最后一条记录。
更新特性常量(并发类型):
CONCUR_READ_ONLY并发只读结果集(默认).
CONCUR_UPDATABLE并发可更新结果集。
滚动特性常量(结果集类型):
TYPE_FORWARD_ONLY,该常量表示指针只能向前移动的ResultSet对象的类型。(默认)
TYPE_SCROLL_INSENSITIVE,该常量指示可滚动但通常不受其他影响的ResultSet对象的类型。
TYPE_SCROLL_SENSITIVE,该常量指示可滚动并且通常受其他更改影响的ResultSet对象的类型。
//敏感:数据库改变,结果集改变。
语法:Statement stm=null;PreparedStatement pstm=null;
stm=con.createStatement(int resultSetType,int resultSetConcurrency);
pstm=con.prepareStatement((String sql,int resultSetType,int resultSetConcurrency);
2) 可更新特性:
l 插入某行操作:
a:moveToInsertRow(),记录当前游标位置,将游标移动到和结果集结构类似的缓冲区;
b:使用updateXXX(int column,colunmType value)方法来更新指定列数据。
c:使用insertRow()方法插入记录。
d:将游标指回原位,moveToCurrentRow()。
l 删除某行操作:
a: absolute(int row),将游标移动到指定行。
b: 使用deleteRow()方法删除记录。
l 更新某行操作:
a: absolute(int row),将游标移动到指定行。
b: 使用updateXXX(int column,colunmType value)方法来更新指定列数据。
c: 使用updateRow()方法更新指定的行。
能否使用JDBC2.0 ResultSet的新特性,要看使用的数据库驱动是否支持这一新特性。
还有只能用于单表且表中主键字段(可能会是联合主键),不能够有表连接,会取可更新操作必须满足以下条件:
1) 查询只能引用一张表。
2) 不能包含任何连接操作。
3) 必须把完整的主键插到结果集里面。
4) 保证所有字段为非空字段并且没有默认值。
使用ResultSet新特性中的只读功能代码如下:
package com.ambow.day21.jdbc.NewFecture;
import java.sql.Array;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
public class ResultSetConcurReadOnlyTest {
public static void main(String args[]) {
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
// 连接数据库
con = JDBCConAndClo.getConnectionBao();
// 执行sql语句
pstm = con.prepareStatement("select * from student order by id",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);// 或用ResultSet.TYPE_SCROLL_SENSITIVE也可以;
rs = pstm.executeQuery();
// 移动到数据库第一行first:并按指定的要求查出结果信息;
System.out.print("这是第一行数据——————");
rs.first();
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// 移动到数据库最后一行last:并按指定的要求查出结果信息;
System.out.print("这是最后一行数据——————");
rs.last();
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// 移动到数据库最后一行之后afterLast:并按指定的要求查出结果信息;
System.out.print("这是最后一行之后数据——————");
rs.afterLast();
System.out.println(rs.isAfterLast());
// 移动到数据库第一行前面BeforeFirst:并按指定的要求查出结果信息;
System.out.print("这是第一行之前数据——————");
rs.beforeFirst();
System.out.println(rs.isBeforeFirst());
// 移动到数据库指定的行前absolute:并按指定的要求查出结果信息;
System.out.print("这是指定行数据——————");
rs.absolute(22);
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// int findColumn(String columnLabel)返回:给定列名称的列索引
System.out.print("这是给出字段得出其在哪一列————");
String str = "score";
int i = rs.findColumn(str);
System.out.println(str + "在第" + i + "列");
// 将光标移动到此 ResultSet 对象的上一行previous。并按指定的要求查出结果信息
System.out.print("这是光标上一行数据——————");
rs.previous();
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// 将光标从当前位置向前移一行next。并按指定的要求查出结果信息。并按指定的要求查出结果信息
System.out.print("这是光标下一行数据——————");
rs.next();
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// 按相对行数(或正或负)移动光标relative。并按指定的要求查出结果信息。并按指定的要求查出结果信息
System.out.print("这是相对行数(或正或负)移动光标数据——————");
rs.relative(-2);
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
// 顺序读取数据库信息:
System.out.println("顺序读取数据库信息:——————");
rs.first();
while(rs.next()){
System.out.print(rs.getInt(1)+" ");
System.out.print(rs.getString(2)+" ");
System.out.print(rs.getString(3)+" ");
System.out.println(rs.getDouble(4));
}
// 逆序读取数据库信息:
System.out.println("逆序读取数据库信息:——————");
rs.last();
while(rs.previous()){
System.out.print(rs.getInt(1)+" ");
System.out.print(rs.getString(2)+" ");
System.out.print(rs.getString(3)+" ");
System.out.println(rs.getDouble(4));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
JDBCConAndClo.closeResultSet(rs);
JDBCConAndClo.closePreparedStatement(pstm);
JDBCConAndClo.closeConnection(con);
}
}
}
使用ResultSet新特性中的更新功能代码如下:
package com.ambow.day21.jdbc.NewFecture;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
import com.ambow.day19.jdbc.util.MySqlDBConnection;
public class ResultSetConcurUpdate {
public static void main(String args[]) {
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
// 连接数据库
// con = JDBCConAndClo.getConnectionBao();//连接Oracle数据库
con = MySqlDBConnection.DBConnection();//连接MySql数据库
// 执行sql语句
pstm = con.prepareStatement("select * from student order by id",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = pstm.executeQuery();
// 删除数据库指定的行
rs.absolute(3);
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
System.out.println("删除数据库指定的行!");
rs.deleteRow();
//更新一行数据
rs.next();
System.out.print(rs.getInt(1) + " ");
System.out.print(rs.getString(2) + " ");
System.out.print(rs.getString(3) + " ");
System.out.println(rs.getInt(4));
System.out.println("更新一条数据!");
rs.updateString(3, "baba");
rs.updateRow();// 更新这一行
//插入新行,可以看成是最后一条记录的下一行,将指针移动到插入行。
System.out.println("插入一条数据!");
rs.moveToInsertRow();
rs.updateInt(1, 9);
rs.updateString(2, "h9");
rs.updateString(3,"English");
rs.updateDouble(4, 88);
rs.insertRow();//执行这个方法,就把新的一行插入到数据库里面
rs.moveToCurrentRow();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
MySqlDBConnection.closeResultSet(rs);
MySqlDBConnection.closePreparedStatement(pstm);
MySqlDBConnection.closeConnection(con);
}
}
}
<!--EndFragment-->
分享到:
相关推荐
9. JDBC2.0 增强特性 第二章 1. JDBC 编程的步骤 第四章 1. 异常 1. JDBC编程中的异常 2. JDBC当中的元数据 3. 事务(ACID) 4. 事务边界的划分: 5. 使用事务过程中可能出现的异常情况: 6. 事务的隔离级别 第五章 ...
本文档演示如何从 Java 存储过程将 JDBC ResultSet 作为 REF CURSOR 返回。JDBC ResultSet 是一个表示数据库的数据表,通常通过执行查询数据库的语句产生该表。REF CURSOR 是 PL/SQL 中相应的类型。Java 存储过程的...
JavaJDBC的视频,通过ResultSet执行查询操作,视频详细描述了如何使用ResultSet执行查询的案例。
JDBC通信原理 JDBC驱动类型 JDBC构成 JDBC程序5步走 滚动的结果集 可更新的结果集 SQL数据类型对应的Java类型 事务及批量处理 行集、连接池、LDAP
JDBC基础教程之ResultSet对象.doc )
次类对ResultSet进行封装,可以将其转化为List,Map,BO等
Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData、查询结果集映射Map与ListMap 1.数据类型 2.封装通用增删改 2.1.封装JDBCUtil 2.2.封装Dao通用增删改 2.3.测试 3.ResultSet...
java组件开发(15) JDBC操作工具类与ResultSet数据
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回的实际上就是一张数据表,有一个指针指向数据表的第一行的前面, * ...
JDBC规范 java.sql和javax.sql两个包中的类与接口(天龙八部): DataSource:数据源 ... ResultSet:结果集,封装了多条记录 JDBC数据库连接池/Connection Pool DBCP:apache tomcat内置
ResultSet的用法
Java-JDBC【之】实现ORM,结果集映射实体类(ResultSet、注解、反射) 1.ORM实现思路 2.@Table、@Column、标识实体类 2.1.创建注解 @Table、@Column 2.2.标识实体类 2.3.数据库表 3.结果集解析,注解加反射填充实体...
在JTable中动态显示ResultSet对象 需要设置好数据源~
1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...
ResultSet 转为listmap
1.在JDBC中包括了两个包:java.sql和javax.sql。 ① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如...
TDengine 的 JDBC 驱动实现尽可能的与关系型数据库驱动保持一致,但时序空间数据库与关系对象型数据库服务的对象和技术特征的差异导致 taos-jdbcdriver 并未完全实现 JDBC 标准规范。在使用时需要注意以下几点: ...
java数据库连接ResultSet
这是一个用来教你如何使用ResultSet 获取数据对象的文档,非常使用
ResultSet直接在JTable显示