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 kérhet le nagy méretű egyoszlopos értéket egy SQL Server-adatbázisból a getCharacterStream metódussal.
A minta kódfájljának neve ReadLargeData.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 tartalmazza az mssql-jdbc jar fájlt. 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 mssql-jdbc 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 kell használni. 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 mintaadatokat, és paraméteres lekérdezéssel frissíti a Production.Document táblát.
A mintakód emellett bemutatja, hogyan szerezheti be az adaptív pufferelési módot az SQLServerStatement osztály getResponseBuffering metódusával. Vegye figyelembe, hogy a JDBC-illesztőprogram 2.0-s verziójától kezdve a responseBuffering kapcsolati tulajdonság alapértelmezés szerint "adaptív" értékre van állítva.
Ezután az SQLServerStatement objektummal rendelkező SQL-utasítás használatával a mintakód futtatja az SQL-utasítást, és a visszaadott adatokat egy SQLServerResultSet-objektumba helyezi.
Végül a mintakód végigvezeti az eredményhalmazban lévő adatsorokat, és a getCharacterStream metódussal éri el az adatok egy részét.
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerStatement;
public class ReadLargeData {
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>";
// Create test data as an example.
StringBuffer buffer = new StringBuffer(4000);
for (int i = 0; i < 4000; i++)
buffer.append((char) ('A'));
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement("UPDATE Production.Document SET DocumentSummary = ? WHERE (DocumentID = 1)");) {
pstmt.setString(1, buffer.toString());
pstmt.executeUpdate();
// In adaptive mode, the application does not have to use a server cursor
// to avoid OutOfMemoryError when the SELECT statement produces very large
// results.
// Create and execute a SQL statement that returns some data.
String SQL = "SELECT Title, DocumentSummary FROM Production.Document";
// Display the response buffering mode.
SQLServerStatement SQLstmt = (SQLServerStatement) stmt;
System.out.println("Response buffering mode is: " + SQLstmt.getResponseBuffering());
SQLstmt.close();
// Get the updated data from the database and display it.
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
Reader reader = rs.getCharacterStream(2);
if (reader != null) {
char output[] = new char[40];
while (reader.read(output) != -1) {
// Do something with the chunk of the data that was
// read.
}
System.out.println(rs.getString(1) + " has been accessed for the summary column.");
// Close the stream.
reader.close();
}
}
}
// Handle any errors that may have occurred.
catch (SQLException | IOException e) {
e.printStackTrace();
}
}
}