Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta aplicação de exemplo do Microsoft JDBC Driver para SQL Server demonstra como recuperar um valor grande de uma única coluna a partir de uma base de dados SQL Server usando o método getCharacterStream .
O ficheiro de código deste exemplo chama-se ReadLargeData.java e pode ser encontrado na seguinte localização:
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Requerimentos
Para executar esta aplicação de exemplo, precisará de acesso à base de dados de exemplo AdventureWorks2025. Também deve definir o caminho da classe para incluir o ficheiro jar mssql-jdbc. Para mais informações sobre como definir o percurso de classes, veja Usar o Driver JDBC.
Observação
O Microsoft JDBC Driver para SQL Server fornece ficheiros de biblioteca de classes mssql-jdbc para serem usados dependendo das definições do seu Java Runtime Environment (JRE) preferidas. Para mais informações sobre qual ficheiro JAR escolher, consulte Requisitos de Sistema para o Driver JDBC.
Example
No exemplo seguinte, o código de exemplo faz uma ligação à base de dados AdventureWorks2025. De 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 buffering adaptativo usando o método getResponseBuffering da classe SQLServerStatement . Note-se que, a partir da versão 2.0 do driver JDBC, a propriedade de ligação responseBuffering está definida como "adaptive" por predefinição.
Depois, usando uma instrução SQL com o objeto SQLServerStatement , o código de exemplo executa a instrução SQL e coloca os dados que devolve num objeto SQLServerResultSet .
Finalmente, o código de exemplo itera pelas linhas de dados que estão no conjunto de resultados e utiliza o método getCharacterStream para aceder a 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 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();
}
}
}