JDBC中的CONCUR_READ_ONLY ResultSet是什么?说明?

通常,您将把它作为值createStatement()作为ResultSet并发类型的值传递给方法。

Statement createStatement(int resultSetType, int resultSetConcurrency)

这种类型的结果集不可更新。即,一旦获得ResultSet对象,就无法更新其内容。

示例

假设我们在数据库中有一个名为Employee的表,其内容如下:

+----+---------+--------+----------------+

| Id | Name    | Salary | Location       |

+----+---------+--------+----------------+

| 1  | Amit    | 3000   | Hyderabad      |

| 2  | Kalyan  | 4000   | Vishakhapatnam |

| 3  | Renuka  | 6000   | Delhi          |

| 4  | Archana | 96000  | Mumbai         |

| 5  | Sumith  | 11000  | Hyderabad      |

| 6  | Rama    | 11000  | Goa            |

| 7  | Mahesh  | 5300   | Vishakhapatnam |

| 8  | Ramesh  | 12000  | Hyderabad      |

| 9  | Suresh  | 7600   | Pune           |

| 10 | Santosh | 96000  | Mumbai         |

+----+---------+--------+----------------+

在以下示例中,我们尝试将员工的薪水值增加5000,并打印结果。

import java.sql.*;

public class Updatable {

   public static void main(String[] args) throws Exception {

      //注册驱动程序

      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //获得连接

      String mysqlUrl = "jdbc:mysql://localhost/TestDB";

      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

      System.out.println("Connection established......");

      //创建一个Statement对象

      Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

      //检索数据

      ResultSet rs = stmt.executeQuery("select * from Employees");

      //打印表的内容

      System.out.println("Contents of the table: ");

      rs.beforeFirst();

      while(rs.next()) {

         System.out.print("ID: " + rs.getInt("id"));

         System.out.print(", Salary: " + rs.getInt("Salary"));

         System.out.print(", Name: " + rs.getString("Name"));

         System.out.println(", Location: " + rs.getString("Location"));

      }

      System.out.println();

      //的起点

      rs.beforeFirst();

      //每位员工的薪水提高5000-

      while(rs.next()) {

         //通过列名检索

         int newSal = rs.getInt("Salary") + 5000;

         rs.updateInt( "Salary", newSal );

         rs.updateRow();

      }

      System.out.println("Conetnets of the resultset after increaing salaries");

      rs.beforeFirst();

      while(rs.next()) {

         System.out.print("ID: " + rs.getInt("id"));

         System.out.print(", Salary: " + rs.getInt("Salary"));

         System.out.print(", Name: " + rs.getString("Name"));

         System.out.println(", Location: " + rs.getString("Location"));

      }

      System.out.println();

   }

}

错误

由于我们创建的ResultSet是只读的,因此您无法更新ResultSet的内容,并且会出现以下错误。

Connection established......

Contents of the table:

ID: 1, Salary: 8000, Name: Amit, Location: Hyderabad

ID: 2, Salary: 9000, Name: Kalyan, Location: Vishakhapatnam

ID: 3, Salary: 11000, Name: Renuka, Location: Delhi

ID: 4, Salary: 101000, Name: Archana, Location: Mumbai

ID: 5, Salary: 16000, Name: Sumith, Location: Hyderabad

ID: 6, Salary: 16000, Name: Rama, Location: Goa

ID: 7, Salary: 10300, Name: Mahesh, Location: Vishakhapatnam

ID: 8, Salary: 17000, Name: Ramesh, Location: Hyderabad

ID: 9, Salary: 12600, Name: Suresh, Location: Pune

ID: 10, Salary: 101000, Name: Santosh, Location: Mumbai

Exception in thread "main" com.mysql.jdbc.NotUpdatable: Result Set not

updatable.This result set must come from a statement that was created with a

result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one

table, can not use functions and must select all primary keys from that table. See

the JDBC 2.1 API Specification, section 5.6 for more details.This result set must

come from a statement that was created with a result set type of

ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use

functions and must select all primary keys from that table. See the JDBC 2.1 API

Specification, section 5.6 for more details.

at com.mysql.jdbc.ResultSetImpl.updateInt(ResultSetImpl.java:8457)

at com.mysql.jdbc.ResultSetImpl.updateInt(ResultSetImpl.java:8475)

at NewSet.Updatable.main(Updatable.java:42)

以上是 JDBC中的CONCUR_READ_ONLY ResultSet是什么?说明? 的全部内容, 来源链接: utcz.com/z/340984.html

回到顶部