Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przypadku korzystania ze sterownika JDBC firmy Microsoft dla programu SQL Server może być konieczne obsługa złożonych instrukcji, w tym instrukcji, które są dynamicznie generowane w czasie wykonywania. Złożone instrukcje często wykonują różne rodzaje zadań, w tym aktualizacje, dodatki i usuwania. Te typy instrukcji mogą również zwracać wiele zestawów wyników i parametrów wyjściowych. W takich sytuacjach kod Java, który uruchamia instrukcje, może nie wiedzieć z wyprzedzeniem typów i liczby zwracanych obiektów i danych.
Aby przetworzyć złożone instrukcje, sterownik JDBC udostępnia wiele metod wykonywania zapytań dotyczących obiektów i danych, które są zwracane, aby aplikacja mogła je poprawnie przetworzyć. Kluczem do przetwarzania złożonych instrukcji jest metoda execute klasy SQLServerStatement . Ta metoda zwraca wartość logiczną . Gdy wartość jest true, pierwszy wynik zwrócony z zapytania jest zestawem wyników. Jeśli wartość to false, zwracany pierwszy wynik to liczba aktualizacji.
Gdy znasz typ zwracanego obiektu lub danych, możesz użyć metody getResultSet lub getUpdateCount , aby przetworzyć te dane. Aby przejść do następnego obiektu lub danych zwracanych z instrukcji złożonej, możesz wywołać metodę getMoreResults .
W poniższym przykładzie do funkcji przekazane jest otwarte połączenie z przykładową bazą danych AdventureWorks2025, gdzie tworzona jest złożona instrukcja łącząca wywołanie procedury składowanej z zapytaniem SQL. Instrukcje są następnie uruchamiane, a pętla do jest używana do przetwarzania wszystkich zestawów wyników i zaktualizowanych liczników, które są zwracane.
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();
}
}