この Microsoft SQL Server JDBC Driver サンプル アプリケーションは、データベース内の大きな列値を更新する方法を示しています。
このサンプルのコード ファイルは updateLargeData.java という名前で、次の場所にあります。
<インストール ディレクトリ>\sqljdbc_<バージョン>\<言語>\help\samples\adaptive
必要条件
このサンプル アプリケーションを実行するには、SQL Server 2005 AdventureWorks サンプル データベースへのアクセス権が必要です。また、クラスパスの設定で sqljdbc4.jar ファイルを追加する必要があります。クラスパスに sqljdbc4.jar のエントリがない場合、サンプル アプリケーションで "Class not found" という一般的な例外がスローされます。クラスパスの設定方法の詳細については、「JDBC ドライバーの使用」を参照してください。
メモ : |
---|
Microsoft SQL Server JDBC Driver Version 2.0 には、sqljdbc.jar と sqljdbc4.jar という 2 つのクラス ライブラリ ファイルが用意されており、必要な Java ランタイム環境 (JRE) 設定によって自由に使い分けることができます。このサンプルは、JDBC 4.0 API で導入された isWrapperFor メソッドと unwrap メソッドを使用して、ドライバー固有の応答バッファリング メソッドにアクセスします。このサンプルをコンパイルして実行するには、JDBC 4.0 をサポートする sqljdbc4.jar クラス ライブラリが必要となります。選択する JAR ファイルの詳細については、「JDBC ドライバーのシステム要件」を参照してください。 |
例
次の例のサンプル コードでは、SQL Server 2005 AdventureWorks データベースへの接続を行います。さらに、Statement オブジェクトを作成し、isWrapperFor メソッドを使用して、Statement オブジェクトが、指定された SQLServerStatement クラスのラッパーであるかどうかをチェックします。ドライバー固有の応答バッファリング メソッドにアクセスするために、unwrap メソッドが使用されています。
次に、SQLServerStatement クラスの setResponseBuffering メソッドを使用して、応答バッファリング モードを "adaptive" に設定します。サンプル コードを見ると、アダプティブ バッファリング モードの取得方法も確認できます。
さらに、SQL ステートメントを実行し、返されたデータを更新可能な SQLServerResultSet オブジェクトに設定しています。
最後に、結果セットに格納されているデータ行を反復処理します。空のドキュメント概要が見つかった場合、updateString メソッドと updateRow メソッドを組み合わせて使用して、データの行を更新し、再度データベースに格納します。既にデータが存在する場合は、getString メソッドを使用して、格納されているデータの一部が表示されます。
JDBC Driver Version 2.0 リリース以降では、"adaptive." がドライバーの既定の動作です。ただし、順方向専用の更新可能な結果セットの場合で、なおかつ、結果セットのデータのサイズが、アプリケーションのメモリ容量を超える場合は、SQLServerStatement クラスの setResponseBuffering メソッドを使用して、アプリケーションからアダプティブ バッファリング モードを明示的に設定する必要があります。
import java.sql.*;
import java.io.*;
import com.microsoft.sqlserver.jdbc.SQLServerStatement;
public class updateLargeData {
public static void main(String[] args) {
// Create a variable for the connection string.
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;";
// Declare the JDBC objects.
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
Reader reader = null;
try {
// Establish the connection.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
// Since the summaries could be large, make sure that
// the driver reads them incrementally from a database,
// even though a server cursor is used for the updatable result sets.
// The recommended way to access the Microsoft SQL Server JDBC Driver
// specific methods is to use the JDBC 4.0 Wrapper functionality.
// The following code statement demonstrates how to use the
// Statement.isWrapperFor and Statement.unwrap methods
// to access the driver specific response buffering methods.
if (stmt.isWrapperFor(com.microsoft.sqlserver.jdbc.SQLServerStatement.class)) {
SQLServerStatement SQLstmt =
stmt.unwrap(com.microsoft.sqlserver.jdbc.SQLServerStatement.class);
SQLstmt.setResponseBuffering("adaptive");
System.out.println("Response buffering mode has been set to " +
SQLstmt.getResponseBuffering());
}
// Select all of the document summaries.
rs = stmt.executeQuery("SELECT Title, DocumentSummary FROM Production.Document");
// Update each document summary.
while (rs.next()) {
// Retrieve the original document summary.
reader = rs.getCharacterStream("DocumentSummary");
if (reader == null)
{
// Update the document summary.
System.out.println("Updating " + rs.getString("Title"));
rs.updateString("DocumentSummary", "Work in progress");
rs.updateRow();
}
else
{
// Do something with the chunk of the data that was
// read.
System.out.println("reading " + rs.getString("Title"));
reader.close();
reader = null;
}
}
}
// Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
}
finally {
if (reader != null) try { reader.close(); } catch(Exception e) {}
if (rs != null) try { rs.close(); } catch(Exception e) {}
if (stmt != null) try { stmt.close(); } catch(Exception e) {}
if (con != null) try { con.close(); } catch(Exception e) {}
}
}
}