Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
JDBC-illesztőprogram letöltése
Ez az SQL Server-mintaalkalmazáshoz készült Microsoft JDBC-illesztő bemutatja, hogyan frissíthet egy nagy oszlopot egy adatbázisban.
A minta kódfájljának neve UpdateLargeData.java, és a következő helyen található:
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Requirements
A mintaalkalmazás futtatásához hozzá kell férnie az AdventureWorks2025 mintaadatbázishoz. Meg kell adnia az osztályútvonalat is, hogy az tartalmazza a sqljdbc4.jar fájlt. Ha az osztályútvonalból hiányzik az sqljdbc4.jar bejegyzés, a mintaalkalmazás a gyakori "Nem található osztály" kivételt fogja dobni. Az osztályút beállításáról további információt a JDBC-illesztőprogram használata című témakörben talál.
Megjegyzés:
Az SQL Serverhez készült Microsoft JDBC-illesztőprogram sqljdbc.jar, sqljdbc4.jar, sqljdbc41.jar vagy sqljdbc42.jar osztálytárfájlokat biztosít, amelyeket az előnyben részesített Java Futtatókörnyezet (JRE) beállításaitól függően használhat. Ez a minta a JDBC 4.0 API-ban bevezetett isWrapperFor és unwrap metódusokat használja az illesztőprogram-specifikus válaszpufferelési módszerek eléréséhez. A minta fordításához és futtatásához sqljdbc4.jar osztálykódtárra lesz szüksége, amely támogatja a JDBC 4.0-t. További információ arról, hogy melyik JAR-fájlt válassza, lásd a JDBC-illesztőprogram rendszerkövetelményei című témakört.
Example
Az alábbi példában a mintakód kapcsolatot létesít az AdventureWorks2025 adatbázissal. Ezután a mintakód létrehoz egy Utasítás objektumot, és az isWrapperFor metódussal ellenőrzi, hogy az Utasítás objektum burkoló-e a megadott SQLServerStatement osztályhoz. A unwrap metódus az illesztőprogram-specifikus válaszpufferelési módszerek eléréséhez használható.
Ezután a mintakód "adaptívként" állítja be a válaszpufferelési módot az SQLServerStatement osztály setResponseBuffering metódusával, és azt is bemutatja, hogyan szerezheti be az adaptív pufferelési módot.
Ezután futtatja az SQL-utasítást, és a visszaadott adatokat egy frissíthető SQLServerResultSet-objektumba helyezi.
Végül a mintakód végigvezeti az eredményhalmazban lévő adatsorokon. Ha üres dokumentumösszegzést talál, az updateString és az updateRow metódusok kombinációjával frissíti az adatsort, és ismét megőrzi az adatbázisba. Ha már vannak adatok, a getString metódussal jelenít meg néhány adatot.
Az illesztőprogram alapértelmezett viselkedése az "adaptív". A csak továbbítható eredményhalmazok esetében azonban, ha az eredményhalmaz adatai nagyobbak az alkalmazás memóriájában, az alkalmazásnak explicit módon kell beállítania az adaptív pufferelési módot az SQLServerStatement osztály setResponseBuffering metódusával.
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);
}
}