Partager via


Exemple de lecture de données volumineuses

Télécharger le pilote JDBC

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, en utilisant une instruction SQL avec l’objet SQLServerStatement, il exécute les instructions SQL et place les données qu’il 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 an 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();
        }
    }
}

Voir aussi

Utilisation de données volumineuses