• 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 {
       ....
    }
    
    Java

    浏览结果集

    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.Stringjava.lang.Objectjava.net.URL等。

    还有一些方法可以获取SQL数据类型java.sql.Date,java.sql.Timejava.sql.TimeStampjava.sql.Clobjava.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包中的StringObjectURL和SQL数据类型。

    更新结果集中的一行会更改ResultSet对象中当前行的列,但不会更改底层数据库中的列的值。 要更新数据库中的行,需要调用以下方法之一。

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

    为了更好的理解,建议您学习研究“更新结果集示例代码”

  • 相关阅读:
    Android Studio:xxx is not an enclosing class 错误的解决方法
    SpringMVC验证框架Validation特殊用法
    在Spring MVC中使用注解的方式校验RequestParams
    Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
    Bean Validation 技术规范特性概述
    JSR 303
    SpringMVC学习
    javax.validation.UnexpectedTypeException: No validator could be found for constraint 'org.hibernate.validator.constraints.Length' validating type
    SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
    Spring AspectJ切入点语法详解
  • 原文地址:https://www.cnblogs.com/borter/p/9608768.html
Copyright © 2020-2023  润新知