Lendo exemplo de dados grandes
Este aplicativo de amostra do Driver JDBC da Microsoft para SQL Server demonstra como recuperar um grande valor de coluna única de um banco de dados SQL Server usando o método getCharacterStream.
O arquivo de código desta amostra chama-se ReadLargeData.java e pode ser encontrado no seguinte local:
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Requisitos
Para executar este aplicativo de exemplo, você precisará ter acesso ao banco de dados de exemplo AdventureWorks2022. Você também precisará definir o classpath para incluir o arquivo mssql-jdbc.jar. Para obter mais informações sobre como definir o caminho de classe, confira Como usar o JDBC Driver.
Observação
O Microsoft JDBC Driver para SQL Server fornece os arquivos de biblioteca de classes mssql-jdbc a serem usados de acordo com suas configurações preferenciais do JRE (Java Runtime Environment). Para saber mais sobre qual arquivo JAR escolher, confira os requisitos do sistema para o JDBC Driver.
Exemplo
No exemplo a seguir, o código de exemplo faz uma conexão com o banco de dados AdventureWorks2022. Em seguida, o código de exemplo cria dados de exemplo e atualiza a tabela Production.Document usando uma consulta parametrizada.
Além disso, o código de exemplo demonstra como obter o modo de buffer adaptável usando o método getResponseBuffering da classe SQLServerStatement. Observe que, a partir da versão 2.0 do driver JDBC, a propriedade de conexão responseBuffering é definida por padrão como "adaptável".
Em seguida, usando uma instrução SQL com o objeto SQLServerStatement, o código de exemplo executa a instrução SQL e coloca os dados retornados em um objeto SQLServerResultSet.
Por fim, o código de exemplo itera pelas linhas de dados do conjunto de resultados e usa o método getCharacterStream para acessar alguns dos dados.
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();
}
}
}