目录:

一、可滚动、可更新的结果集

二、处理Blob类型数据

三、使用ResultSetMetaData分析结果集

  可以使用next()、absolute()、afterLast()、previous()等方法自由移动记录指针的ResultSet被称为可滚动的结果集
  以默认方式打开的ResultSet是不可更新的,如果希望创建可更新的ResultSet,则必须在创建Statement或prepareStatement时传入额外参数。Connection在创建Statement或PrepareStatement时还可额外传入如下两个参数:
1、resultSetType:控制ResultSet的类型,该参数可以取如下三个值
(1)ResultSet.TYPE_FORWARD_ONLY:该常量控制记录指针只能向前移动。这是JDK1.4以前的默认值。
(2)ResultSet.TYPE_SCROLL_INSENSITIVE:该常量控制指针可以自由移动(可滚动结果集),但底层数据的改变不会影响ResultSet的内容。
(3)ResultSet.TYPE_SCROLL_SENSITIVE:该常量控制记录指针可以自由记录(可滚动的结果集),而且底层数据的改变会影响ResultSet的内容。
2、resultSetConcurrency:控制ResultSet的并发类型,该参数可以接受如下两个值:
(1)ResultSet.CONCUR_READ_ONLY:该常量指示ResultSet是只读的并发模式(默认)。
(2)ResultSet.CONCUR_UPDATABLE:该常量指示ResultSet是可更新的并发模式。
下面创建一个PreparedStatement对象,由该对象生成的ResultSet对象将是可滚动、可更新的结果集。

1 //使用Connection创建一个PreparedStatement对象
2 //传入控制结果集可滚动、可更新的参数:
3 pstmt=conn.preparedStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

可更新的结果集还需要满足如下两个条件:
★所有数据都应该来自一个表
★选出的数据集必须包含主键列
在创建了可滚动、可更新的ResultSet时,程序可调用ResultSet的updateXxx(int columnIndex,Xxx value)方法来修改执政所指记录、特定列的值,最后调用ResultSet的updateRow()方法来提交修改。
Java 8为ResultSet添加了updateObject(String columnLable,Object x,SQLType targetSqlType)和updateObject(int columnIndex,Object x,SQLType targetSqlObject)两个默认方法,这两个方法可以直接使用Object来修改记录指针所指记录、特定列的值,其中SQLType用于指定该数据列的类型。
下面示范创建这种可滚动、可更新的结果集的方法:

 1 package section5;
 2 
 3 import java.io.FileInputStream;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.util.Properties;
 9 
10 public class ResultSetTest
11 {
12 private String driver;
13 private String url;
14 private String user;
15 private String pass;
16 public void initParam(String paramFile)
17 throws Exception
18 {
19 //使用Properties类加载属性
20 var props=new Properties();
21 props.load(new FileInputStream(paramFile));
22 driver=props.getProperty("driver");
23 url=props.getProperty("url");
24 user=props.getProperty("user");
25 pass=props.getProperty("pass");
26 }
27 public void query(String sql)
28 throws Exception
29 {
30 //加载驱动
31 Class.forName(driver);
32 try(
33 //创建连接
34 Connection conn= DriverManager.getConnection(url,user,pass);
35 //创建结果集可滚动、可更新的参数
36 PreparedStatement pstmt=conn.prepareStatement(sql,
37 ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
38 ResultSet rs=pstmt.executeQuery()
39 )
40 {
41 rs.last();//指针记录定位到最后一行
42 int rowCount=rs.getRow();//查询由多少条记录
43 for(var i = rowCount;i>0;i--)
44 {
45 rs.absolute(i);//将记录指针移动到第i行
46 System.out.println(rs.getString(1)+"\t"
47 +rs.getString(2)+"\t"+rs.getString(3));
48 //修改记录指针所指记录第二列的值
49 rs.updateString(2,"学生名"+i);
50 //提交修改
51 rs.updateRow();
52 }
53 }
54 }
55 public static void main(String[] args)
56 throws Exception
57 {
58 var rt=new ResultSetTest();
59 rt.initParam("src\\mysql.ini");
60 rt.query("select *from student_table;");
61 }
62 }
View Code

相关文章:

  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2021-08-23
  • 2022-01-17
  • 2021-10-01
  • 2022-02-22
猜你喜欢
  • 2021-05-19
  • 2021-05-11
  • 2021-05-10
  • 2021-12-05
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
相关资源
相似解决方案