Java DatabaseMetaData 的 supportsResultSetConcurrency() 方法及示例


在建立 **Statement** 物件時,您可以使用 **createStatement()** 方法的以下變體來選擇 ResultSet 物件的併發性和型別:

Statement createStatement(int resultSetType, int resultSetConcurrency)

ResultSet 併發性

ResultSet 物件的併發性決定了其內容是否可以更新。

ResultSet 介面提供兩個值來指定併發性,即:

  • **CONCUR_READ_ONLY:** 如果在建立 ResultSet 物件時將此設定為併發性的值,則無法更新 ResultSet 的內容,只能讀取/檢索它們。

  • **CONCUR_UPDATABLE:** 如果在建立 ResultSet 物件時將此設定為併發性的值,則可以更新 ResultSet 的內容。

ResultSet 型別

ResultSet 物件的型別根據您可以遍歷的方向及其敏感性(ResultSet 中所做的更改是否反映在資料庫中)來確定結果集的型別。

ResultSet 介面提供三個值來指定 ResultSet 型別,即:

  • **TYPE_FORWARD_ONLY:** 遊標只能在一個方向上移動的 ResultSet 物件稱為只向前 ResultSet。預設情況下,JDBC 結果集是隻向前結果集。

  • **TYPE_SCROLL_INSENSITIVE:** 遊標可以向前或向後移動的 ResultSet。此型別的 ResultSet 對資料庫中所做的更改不敏感,即資料庫中所做的修改不會反映在 ResultSet 中。

  • **TYPE_SCROLL_SENSITIVE:** 遊標可以向前或向後移動的 ResultSet。此型別的 ResultSet 對資料庫中所做的更改敏感,即資料庫中所做的修改會反映在 ResultSet 中。

**DatabaseMetaData** 介面的 **supportsResultSetConcurrency()** 方法用於確定底層資料庫是否支援給定結果集型別結合指定的併發性。

此方法接受兩個整型引數,分別指定結果集型別和併發性,並返回一個布林值,該值是:

  • True,當底層資料庫支援給定結果集型別結合指定的併發性時。
  • False,當底層資料庫不支援給定結果集型別結合指定的併發性時。

要確定底層資料庫是否支援給定結果集型別結合指定的併發性:

  • 確保您的資料庫正在執行。
  • 使用 DriverManager 類的 registerDriver() 方法註冊驅動程式。傳遞與底層資料庫對應的驅動程式類的物件。
  • 使用 DriverManager 類的 getConnection() 方法獲取連線物件。將資料庫的 URL、使用者名稱和資料庫中使用者的密碼作為字串變數傳遞。
  • 使用 Connection 介面的 getMetaData() 方法獲取當前連線的 DatabaseMetaData 物件。
  • 最後,呼叫 ResultSetMetaData 介面的 **supportsResultSetConcurrency()** 方法,並將返回值儲存在一個布林變數中,例如 bool。如果此值為 true,則底層資料庫支援給定結果集型別結合指定的併發性,否則不支援。

以下 JDBC 程式建立與 MySQL 資料庫的連線,並確定並列印它是否支援給定結果集型別結合指定的併發性。

示例

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseMetadata_supportsResultSetConcurrency {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String url = "jdbc:mysql:///mydatabase";
      Connection con = DriverManager.getConnection(url, "root", "password");
      System.out.println("Connection established......");
      //Retrieving the meta data object
      DatabaseMetaData metaData = con.getMetaData();
      //Determining whether the underlying database supports the specified concurrency
      boolean bool = metaData.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE,
          ResultSet.CONCUR_UPDATABLE);
      if(bool) {
         System.out.println("Underlying database supports the specified concurrency");
      } else {
         System.out.println("Underlying database does not supports the specified concurrency");
      }
   }
}

輸出

Connection established......
Underlying database support the specified concurrency

更新於: 2019-07-30

190 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.