Tratando instruções complexas
Quando você usar o Driver JDBC da Microsoft para SQL Server, pode ter que tratar instruções complexas, incluindo instruções que são geradas dinamicamente em tempo de execução. As instruções complexas geralmente executam diferentes tipos de tarefas, incluindo atualizações, inserções e exclusões. Estes tipos de instruções também podem retornar vários conjuntos de resultados e parâmetros de saída. Nestas situações, o código Java que executa as instruções pode não saber com antecedência os tipos e o número de objetos e dados retornados.
Para processar instruções complexas, o Driver JDBC fornece muitos métodos para consultar os objetos e dados retornados para que seu aplicativo possa processá-los corretamente. A chave para processar instruções complexas é o método execute da classe SQLServerStatement. Esse método retorna um valor booliano. Quando o valor for true, o primeiro resultado retornado das instruções será um conjunto de resultados. Se o valor for false, o primeiro resultado retornado será uma contagem de atualização.
Quando você souber o tipo de objeto ou dados retornados, pode usar o método getResultSet ou getUpdateCount para processar esses dados. Para con tinuar para o próximo objeto ou dados retornados da instrução complexa, chame o método getMoreResults.
No exemplo a seguir, uma conexão aberta com o banco de dados de exemplo AdventureWorks2022 é passada para a função, uma instrução complexa é realizada, combinando uma chamada de procedimento armazenado com uma instrução SQL, as instruções são executadas e um loop do
é usado para processar todos os conjuntos de resultados e as contagens atualizadas são retornadas.
public static void executeComplexStatement(Connection con) {
try (Statement stmt = con.createStatement();) {
String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)}; SELECT TOP 10 * FROM Person.Contact";
boolean results = stmt.execute(sqlStringWithUnknownResults);
int count = 0;
do {
if (results) {
ResultSet rs = stmt.getResultSet();
System.out.println("Result set data displayed here.");
}
else {
count = stmt.getUpdateCount();
if (count >= 0) {
System.out.println("DDL or update data displayed here.");
}
else {
System.out.println("No more results to process.");
}
}
results = stmt.getMoreResults();
}
while (results || count != -1);
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}