Memperbarui Sampel Data Besar
Aplikasi sampel Microsoft JDBC Driver for SQL Server ini menunjukkan cara memperbarui kolom besar dalam database.
File kode untuk sampel ini diberi nama UpdateLargeData.java, dan dapat ditemukan di lokasi berikut:
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Persyaratan
Untuk menjalankan aplikasi sampel ini, Anda memerlukan akses ke database sampel AdventureWorks2022. Anda juga harus mengatur classpath untuk menyertakan file sqljdbc4.jar. Jika classpath kehilangan entri untuk sqljdbc4.jar, aplikasi sampel akan melemparkan pengecualian umum "Kelas tidak ditemukan". Untuk informasi selengkapnya tentang cara mengatur classpath, lihat Menggunakan Driver JDBC.
Catatan
Microsoft JDBC Driver for SQL Server menyediakan file pustaka kelas sqljdbc.jar, sqljdbc4.jar, sqljdbc41.jar, atau sqljdbc42.jar yang akan digunakan tergantung pada pengaturan Java Runtime Environment (JRE) pilihan Anda. Sampel ini menggunakan metode isWrapperFor dan unwrap , yang diperkenalkan dalam API JDBC 4.0, untuk mengakses metode buffering respons khusus driver. Untuk mengkompilasi dan menjalankan sampel ini, Anda memerlukan pustaka kelas sqljdbc4.jar, yang menyediakan dukungan untuk JDBC 4.0. Untuk informasi selengkapnya tentang file JAR mana yang akan dipilih, lihat Persyaratan Sistem untuk Driver JDBC.
Contoh
Dalam contoh berikut, kode sampel membuat koneksi ke database AdventureWorks2022. Kemudian, kode sampel membuat objek Pernyataan dan menggunakan metode isWrapperFor untuk memeriksa apakah objek Pernyataan adalah pembungkus untuk kelas SQLServerStatement yang ditentukan. Metode unwrap digunakan untuk mengakses metode buffering respons khusus driver.
Selanjutnya, kode sampel mengatur mode buffering respons sebagai "adaptif" dengan menggunakan metode setResponseBuffering dari kelas SQLServerStatement dan juga menunjukkan cara mendapatkan mode buffering adaptif.
Kemudian, ia menjalankan pernyataan SQL, dan menempatkan data yang dikembalikannya ke objek SQLServerResultSet yang dapat diperbarui.
Terakhir, kode sampel berulang melalui baris data yang ada dalam tataan hasil. Jika menemukan ringkasan dokumen kosong, ia menggunakan kombinasi metode updateString dan updateRow untuk memperbarui baris data dan kembali mempertahankannya ke database. Jika sudah ada data, ia menggunakan metode getString untuk menampilkan beberapa data.
Perilaku default driver adalah "adaptif." Namun, untuk tataan hasil yang dapat diperbarui hanya maju dan ketika data dalam tataan hasil lebih besar dari memori aplikasi, aplikasi harus mengatur mode buffering adaptif secara eksplisit dengan menggunakan metode setResponseBuffering dari kelas SQLServerStatement .
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
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://<server>:<port>;databaseName=AdventureWorks;user=<user>;password=<password>";
// Establish the connection.
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();
Statement stmt1 = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);) {
createTable(stmt);
// Since the summaries could be large, we should 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 JDBC Driver for SQL Server
// 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.
try (ResultSet rs = stmt1.executeQuery("SELECT Title, DocumentSummary FROM Document_JDBC_Sample")) {
// Update each document summary.
while (rs.next()) {
// Retrieve the original document summary.
try (Reader 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();
}
}
}
}
}
// Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
}
}
private static void createTable(Statement stmt) throws SQLException {
stmt.execute("if exists (select * from sys.objects where name = 'Document_JDBC_Sample')"
+ "drop table Document_JDBC_Sample");
String sql = "CREATE TABLE Document_JDBC_Sample (" + "[DocumentID] [int] NOT NULL identity,"
+ "[Title] [char](50) NOT NULL," + "[DocumentSummary] [varchar](max) NULL)";
stmt.execute(sql);
sql = "INSERT Document_JDBC_Sample VALUES ('title1','summary1') ";
stmt.execute(sql);
sql = "INSERT Document_JDBC_Sample (title) VALUES ('title2') ";
stmt.execute(sql);
sql = "INSERT Document_JDBC_Sample (title) VALUES ('title3') ";
stmt.execute(sql);
sql = "INSERT Document_JDBC_Sample VALUES ('title4','summary3') ";
stmt.execute(sql);
}
}