Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano łączność bazy danych Java (JDBC) i kroki rozwiązywania problemów występujące podczas konfiguracji. Koncentruje się on na JDBC dla programu SQL Server.
Uwaga 16.
- Ten artykuł jest oparty na najnowszym sterowniku JDBC (wersja 12.4) zainstalowanym w katalogu głównym dysku C .
- Firma Microsoft nie rozwiązuje problemów z połączeniami JDBC, w których istnieje menedżer puli połączeń innej firmy. Rozwiązywanie problemów z menedżerem puli połączeń innej firmy może uwidocznić informacje o własności intelektualnej.
Sterownik JDBC firmy Microsoft dla programu SQL Server
Ten artykuł zawiera przewodnik referencyjny dotyczący JDBC, w tym sterownik i dokumentację pomocniczą, instrukcje instalacji dla różnych systemów operacyjnych i rozwiązywanie problemów z połączeniem z programem SQL Server.
Zmiany wersji sterownika JDBC
Wymagania dotyczące JDBC
Wersja środowiska Java Runtime Environment (JRE) musi być zgodna ze sterownikiem z wersją środowiska JRE określoną w nazwie. Na przykład mssql-jdbc-9.4.1.jre8.jar wymaga środowiska JRE 1.8, a mssql-jdbc-9.4.1.jre11.jar wymaga środowiska JRE 11.0.
CLASSPATH to zmienna środowiskowa Języka Java zawierająca ścieżkę katalogu i binarne pliki jar. Język Java wymaga wykonania żądanej aplikacji. Należy określić, które pliki jar sterownika i zależności muszą być uruchamiane przez środowisko Java. Minimum
CLASSPATH
obejmuje bieżący katalog.;
roboczy i lokalizację pliku jar sterownika JDBC.
Kroki konfiguracji JDBC i rozwiązywania problemów
Ustawianie zmiennej CLASSPATH
KlasyPATHs można zdefiniować w zmiennej środowiskowej systemu operacyjnego lub w samym środowisku aplikacji, na przykład Tomcat. Jeśli CLASSPATH
program jest zdefiniowany w środowisku aplikacji, dostawca aplikacji lub deweloper musi być zaangażowany, aby zapewnić odpowiednie CLASSPATH
konfiguracje.
Aby ustawić CLASSPATH
metodę , użyj jednej z następujących metod:
Uwaga 16.
Ustawienie wiersza polecenia jest tymczasowe i zostanie usunięte po zamknięciu okna wiersza polecenia. Graficzny interfejs użytkownika (GUI) jest stałym ustawieniem i wymaga ponownego uruchomienia.
Przykład wiersza polecenia
Set CLASSPATH=.;C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar
Przykład graficznego interfejsu użytkownika
Aby ustawić CLASSPATH
użycie graficznego interfejsu użytkownika, wykonaj następujące kroki:
Otwórz Panel sterowania i wybierz pozycję System i zabezpieczenia.
Wybierz pozycję Ustawienia systemu>zaawansowanego systemu.
Wybierz pozycję Zmienne środowiskowe>Nowy, a następnie wprowadź ciąg CLASSPATH jako nazwę zmiennej.
Wybierz pozycję Edytuj i wprowadź . ; C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar jako wartość zmiennej.
Wybierz przycisk OK.
Parametry połączenia z przekazanymi poświadczeniami
Parametry połączenia z przekazanymi poświadczeniami odnosi się do parametry połączenia, która zawiera poświadczenia uwierzytelniania (takie jak nazwa użytkownika i hasło) jako parametry lub wartości w ciągu. Gdy program łączy się z bazą danych lub inną usługą, musi podać informacje uwierzytelniania w celu nawiązania bezpiecznego połączenia.
Poniższy parametry połączenia przedstawia przykład sposobu nawiązywania połączenia z bazą danych programu SQL Server na podstawie trybu uwierzytelniania, którego chcesz użyć:
Uwierzytelnianie programu SQL Server
Parametry połączenia to String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MySQLAuthAccount>;password=<MyPassword>;trustServerCertificate=true;"
Uwierzytelnianie usługi AD systemu Windows bez zintegrowanych zabezpieczeń
Parametry połączenia to String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Uwierzytelnianie w usłudze Windows AD przy użyciu protokołu Kerberos i bez zintegrowanych zabezpieczeń
Parametry połączenia to String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos"
Zintegrowane połączenie NTLM
W tym rodzaju połączenia komputer kliencki musi znajdować się w domenie systemu Windows.
Plik mssql-jdbc_auth-version-arch<>><.dll musi znajdować się w następujących ścieżkach:
64-bitowa biblioteka DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-bitowa biblioteka DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Możesz zmodyfikować i dodać ścieżkę lub skopiować plik do już ustalonej ścieżki. Aby uzyskać więcej informacji, zobacz Łączenie z zintegrowanym uwierzytelnianiem w systemie Windows.
Parametry połączenia to String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Zintegrowane połączenia Kerberos
Wymagania wstępne dotyczące tego typu połączenia to:
- Musi być częścią domeny.
- W systemie operacyjnym Linux musi być zainstalowany i skonfigurowany plik SSSD.
- Musi mieć zainstalowaną i skonfigurowaną listę Klist w systemie operacyjnym Linux.
Plik mssql-jdbc_auth-version-arch<>><.dll musi znajdować się w następujących ścieżkach. Możesz zmodyfikować i dodać ścieżkę lub skopiować plik do już ustalonej ścieżki.
64-bitowa biblioteka DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-bitowa biblioteka DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Musisz również utworzyć plik Jaas.conf . Domyślnie ten plik nie jest dołączony do sterownika i nie jest instalowany z językiem Java. Aby ułatwić środowisko lokalizowania tego pliku, użyj jednej z następujących metod:
Uwaga 16.
Plik Jaas.conf umożliwi środowisku Java korzystanie z bieżącego kontekstu zalogowanego użytkownika. Zostanie również poinformowana java o użyciu aktualnie buforowanych biletów Protokołu Kerberos.
Zmodyfikuj następujący wiersz w pliku Java.Security :
# Default login configuration file login.config.url.1=C:=\<Path to the File>\jaas.conf
Alternatywnie dodaj plik Jaas.conf za pomocą parametru podczas ładowania środowiska lub aplikacji. Upewnij się, że używasz tego samego parametru podczas kompilowania pliku Java:
javac -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp.java java -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp
Aby nawiązać połączenie z programem SQL Server przy użyciu zintegrowanego uwierzytelniania Kerberos, skonfiguruj plik Jaas.conf :
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Parametry połączenia to String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos;"
Przykładowy kod
Wszystkie sterowniki JDBC są dostarczane z przykładowym kodem w katalogu \sqljdbc_12.4\enu\samples . Najczęściej używanym elementem jest \ sqljdbc_12.4\enu\samples\connections\ConnectURR.java. Utwórz plik o nazwie ConnectURL.java lub użyj ConnectURL.java z przykładu dostarczonego ze sterownikiem.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectURL {
public static void main(String[] args) {
// Create a variable for the connection string. Base the connection string on the previous examples supplied in the above documentation.
String connectionUrl = "jdbc:sqlserver://ServerName:Port;user=SQLAuthAccount;password=SomePassword;trustServerCertificate=true;";
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();)
{
String SQL = "SELECT @@version";
ResultSet rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next())
{
System.out.println(rs.getString(1));
}
}
// Handle any errors that may have occurred.
catch (SQLException e)
{e.printStackTrace(); }
}
}
Śledzenie sterowników JDBC
Ogólnie rzecz biorąc, zawsze chcemy ustawić śledzenie, aby FINEST
uzyskać więcej szczegółów. Istnieją dwie metody śledzenia sterowników: włączanie śledzenia programowo i włączanie śledzenia przy użyciu pliku logging.properties.
Jeśli zdecydujesz się użyć pliku logging.properties , musisz znaleźć odpowiednie środowisko dla pliku logging.properties . $JAVA_HOME\conf\ i $JAVA_HOME\jre\lib to dwie możliwe lokalizacje.
Wykonaj następujące kroki, aby skonfigurować ten plik:
Zmodyfikuj plik logging.properties , aby upewnić się, że jest on podobny do następujących właściwości globalnych:
############################################################ # Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default, we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. handlers= java.util.logging.ConsoleHandler # To also add the FileHandler, use the following line instead. #handlers= java.util.logging.FileHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overridden by a facility-specific level # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= INFO
Programy obsługi informują język Java, gdzie mają być eksportowane dane wyjściowe. Istnieją dwie lokalizacje, w których program FileHandler zapisuje w pliku i program ConsoleHandler zapisuje w oknie konsoli. Dane wyjściowe będą generować dużo danych, więc należy je zapisać w pliku.
Wiersz komentarza
#handlers= java.util.logging.ConsoleHandler
Wiersz komentarza
handlers= java.util.logging.FileHandler
Uwaga 16.
Ustaw
.level
wartość iOFF
nie zobaczysz komunikatów w oknie konsoli..level=OFF
Ustaw określone rejestrowanie programu obsługi plików:
############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # default file output is in user's home directory. java.util.logging.FileHandler.pattern = %h/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 # Default number of locks FileHandler can obtain synchronously. # This specifies maximum number of attempts to obtain lock file by FileHandler # implemented by incrementing the unique field %u as per FileHandler API documentation. java.util.logging.FileHandler.maxLocks = 100 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter # Limit the messages that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Example to customize the SimpleFormatter output format # to print one-line log message like this: # <level>: <log message> [<date/time>] # # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
Zmodyfikuj tę część, aby upewnić się, że jest podobna lub zawiera następujące wiersze:
java.util.logging.FileHandler.pattern = /Path/java%u.log java.util.logging.FileHandler.limit = 5000000 java.util.logging.FileHandler.count = 20 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.level = FINEST
Zmodyfikuj
java.util.logging.FileHandler.pattern = %h/java%u.log
wiersz i zastąp%h/
ciąg ścieżką, którą plik ma być przechowywany. Na przykład:java.util.logging.FileHandler.pattern = c:/Temp/java%u.log
Ustaw poziom rejestrowania sterowników:
Dodaj
com.microsoft.sqlserver.jdbc.level=FINEST
w dolnej części następującej sekcji:############################################################ # Facility-specific properties. # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: # com.xyz.foo.level = SEVERE
Zapisz zmiany.
Plik powinien wyglądać podobnie do następującego:
############################################################ # Default Logging Configuration File # # You can use a different file by specifying a filename # with the java.util.logging.config.file system property. # For example, java -Djava.util.logging.config.file=myfile ############################################################ ############################################################ # Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. #handlers= java.util.logging.ConsoleHandler # To also add the FileHandler, use the following line instead. handlers= java.util.logging.FileHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overridden by a facility-specific level # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= OFF ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # default file output is in user's home directory. java.util.logging.FileHandler.pattern = c:/Temp/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 # Default number of locks FileHandler can obtain synchronously. # This specifies maximum number of attempts to obtain lock file by FileHandler # implemented by incrementing the unique field %u as per FileHandler API documentation. java.util.logging.FileHandler.maxLocks = 100 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter # Limit the messages that are printed on the console to INFO and above. #java.util.logging.ConsoleHandler.level = INFO #java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Example to customize the SimpleFormatter output format # to print one-line log message like this: # <level>: <log message> [<date/time>] # # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n ############################################################ # Facility-specific properties. # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: # com.xyz.foo.level = SEVERE com.microsoft.sqlserver.jdbc.level=FINEST
Po odtworzeniu błędu przywróć zmiany, aby zatrzymać tworzenie plików przez rejestrator.
Alternatywnie możesz utworzyć lub skopiować powyższy tekst, zapisać go w pliku i dodać plik do polecenia uruchamiania podczas ładowania aplikacji.
java -Djava.util.logging.config.file=c:\<Path to the file>\logging.properties myapp
Dzięki temu można zidentyfikować plik logging.properties , który nie jest określony w katalogach domyślnych $JAVA_HOME\conf\
i $JAVA_HOME\jre\lib
za pośrednictwem wiersza polecenia.
Zastrzeżenie dotyczące innych firm
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.