Exemple de lecture de données volumineuses
Cet exemple d'application du pilote JDBC Microsoft montre comment récupérer une valeur de colonne unique de grande taille à partir d'une base de données SQL Server à l'aide de la méthode getCharacterStream.
Le fichier de code pour cet exemple est nommé ReadLargeData.java et se trouve à l’emplacement suivant :
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Configuration requise
Pour exécuter cet exemple d’application, l’accès à l’exemple de base de données AdventureWorks2022 est nécessaire. Vous devez également définir le classpath de façon à inclure le fichier jar mssql-jdbc. Pour plus d’informations sur la façon de définir l’instruction classpath, consultez à l’aide du pilote JDBC.
Notes
Le Pilote Microsoft JDBC pour SQL Server fournit les fichiers bibliothèques de classes mssql-jdbc à utiliser en fonction des paramètres JRE (Java Runtime Environment) choisis. Pour plus d’informations sur le fichier JAR à choisir, voir Configuration requise pour le pilote JDBC.
Exemple
Dans l’exemple suivant, le code établit une connexion à la base de données AdventureWorks2022. Il crée ensuite des exemples de données et met à jour la table Production.Document en utilisant une requête paramétrable.
De plus, il montre comment obtenir le mode de mise en mémoire tampon adaptatif avec la méthode getResponseBuffering de la classe SQLServerStatement. Notez qu'à partir de la version 2.0 du pilote JDBC, la propriété de connexion responseBuffering a la valeur « adaptive » par défaut.
Ensuite, à l’aide d’une instruction SQL avec l’objet SQLServerStatement , l’exemple de code exécute l’instruction SQL et place les données qu’elle retourne dans un objet SQLServerResultSet .
Enfin, l’exemple de code boucle dans les lignes de données du jeu de résultats, et utilise la méthode getCharacterStream pour accéder à certaines données.
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();
}
}
}