Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается подключение к базе данных Java (JDBC) и действия по устранению неполадок, возникающие во время настройки. Основное внимание уделяется JDBC для SQL Server.
Примечание.
- Эта статья основана на последнем драйвере JDBC (версия 12.4), установленном в корне диска C .
- Корпорация Майкрософт не устраняет неполадки с подключениями JDBC, в которых существует сторонний диспетчер пулов подключений. Устранение неполадок с сторонним диспетчером пулов подключений может предоставить информацию о интеллектуальной собственности.
Драйвер Microsoft JDBC для SQL Server
В этой статье приведены справочные руководства по JDBC, включая драйвер и поддержку документации, инструкции по установке различных операционных систем (ОС) и устранение неполадок с подключением к SQL Server.
Изменения версии драйвера JDBC
Требования JDBC
Версия среды выполнения Java (JRE) должна соответствовать драйверу с версией JRE, указанной в имени. Например, для mssql-jdbc-9.4.1.jre8.jar требуется JRE 1.8, а для mssql-jdbc-9.4.1.jre11.jar требуется JRE 11.0.
CLASSPATH — это переменная среды Java, содержащая путь к каталогу и двоичные JAR-файлы. Java должен выполнить нужное приложение. Это требование указать, какой драйвер и двоичные jar-файлы зависимостей должны запускать Java. Минимальное значение
CLASSPATH
включает текущий рабочий каталог.;
и расположение JAR-файла драйвера JDBC.
Действия по настройке и устранению неполадок JDBC
Установка переменной CLASSPATH
КЛАССPATH можно определить в переменной среды ОС или в самой среде приложения, например Tomcat. Если CLASSPATH
он определен в среде приложения, поставщик приложений или разработчик должны быть вовлечены в работу, чтобы обеспечить правильность CLASSPATH
конфигурации.
Чтобы задать CLASSPATH
, используйте один из следующих методов:
Примечание.
Параметр командной строки является временным и будет удален при закрытии окна командной строки. Графический пользовательский интерфейс (GUI) является постоянным параметром и требует перезагрузки.
Пример командной строки
Set CLASSPATH=.;C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar
Пример графического интерфейса
Чтобы задать CLASSPATH
использование графического интерфейса пользователя, выполните следующие действия.
Откройте панель управления и выберите "Система и безопасность".
Выберите параметры системы>advanced system.
Выберите "Переменные>среды", а затем введите CLASSPATH в качестве имени переменной.
Выберите "Изменить " и введите .; C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar в качестве значения переменной.
Нажмите кнопку ОК.
Строки подключения с переданными учетными данными
Строка подключения с переданными учетными данными ссылается на строка подключения, включающую учетные данные проверки подлинности (например, имя пользователя и пароль) в качестве параметров или значений в строке. При подключении программы к базе данных или другой службе необходимо предоставить сведения о проверке подлинности для установления безопасного подключения.
В следующем строка подключения показан пример подключения к базе данных SQL Server на основе режима проверки подлинности, который требуется использовать:
Проверка подлинности SQL Server
Строка подключения — String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MySQLAuthAccount>;password=<MyPassword>;trustServerCertificate=true;"
Проверка подлинности Windows AD без встроенной безопасности
Строка подключения — String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Проверка подлинности Windows AD с помощью Kerberos и без встроенной безопасности
Строка подключения — String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos"
Встроенное подключение NTLM
В этом типе подключения клиентский компьютер должен находиться в домене Windows.
Файл mssql-jdbc_auth-version-arch<>><.dll должен находиться в следующих путях:
64-разрядная библиотека DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-разрядная библиотека DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Можно изменить и добавить путь или скопировать файл в уже установленный путь. Дополнительные сведения см. в статье "Подключение с интегрированной проверкой подлинности в Windows".
Строка подключения — String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Интегрированные подключения Kerberos
Необходимые условия для этого типа подключения:
- Должен быть частью домена.
- Должен быть установлен и настроен SSSD в ОС Linux.
- Должен быть установлен и настроен Klist в ОС Linux.
Файл mssql-jdbc_auth-version-arch<>><.dll должен находиться в следующих путях. Можно изменить и добавить путь или скопировать файл в уже установленный путь.
64-разрядная библиотека DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-разрядная библиотека DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Кроме того, необходимо создать файл Jaas.conf . По умолчанию этот файл не приходит с драйвером и не устанавливается с помощью Java. Чтобы помочь среде найти этот файл, используйте один из следующих методов:
Примечание.
Файл Jaas.conf позволит Java использовать текущий контекст пользователя, вошедшего в систему. Он также сообщит Java использовать кэшированные в настоящее время билеты Kerberos.
Измените следующую строку в файле Java.Security :
# Default login configuration file login.config.url.1=C:=\<Path to the File>\jaas.conf
Кроме того, добавьте файл Jaas.conf через параметр при загрузке среды или приложения. Убедитесь, что при компиляции файла Java используется тот же параметр:
javac -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp.java java -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp
Чтобы установить подключение к SQL Server с помощью интегрированной проверки подлинности Kerberos, настройте файл Jaas.conf :
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Строка подключения — String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos;"
Пример кода
Все драйверы JDBC приходят с примером кода в каталоге \sqljdbc_12.4\enu\samples . Наиболее часто используется в \sqljdbc_12.4\enu\samples\connections\ConnectURR.java. Создайте файл с именем ConnectURL.java или используйте ConnectURL.java из примера, предоставленного драйвером.
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(); }
}
}
Трассировка драйвера JDBC
Как правило, мы всегда хотим задать трассировку FINEST
для получения дополнительных сведений. Существует два метода трассировки драйверов: включение трассировки программным способом и включение трассировки с помощью файла logging.properties.
Если вы решили использовать файл logging.properties, необходимо найти правильную среду для файла logging.properties. $JAVA_HOME\conf\ и $JAVA_HOME\jre\lib — это два возможных расположения.
Выполните следующие действия, чтобы настроить этот файл:
Измените файл logging.properties , чтобы убедиться, что он похож на следующие глобальные свойства:
############################################################ # 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
Обработчики сообщают Java, где экспортировать выходные данные. В окне консоли выполняется запись FileHandler в файл, а ConsoleHandler записывается в окно консоли. Выходные данные будут создавать большое количество данных, поэтому его необходимо записать в файл.
Строка комментариев
#handlers= java.util.logging.ConsoleHandler
Раскомментируйте строку
handlers= java.util.logging.FileHandler
Примечание.
Установите значение
.level
OFF
и вы не увидите сообщения в окне консоли..level=OFF
Задайте определенное ведение журнала FileHandler:
############################################################ # 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
Измените эту часть, чтобы убедиться, что она похожа или содержит следующие строки:
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
Измените
java.util.logging.FileHandler.pattern = %h/java%u.log
строку и замените%h/
путь, который требуется сохранить файл. Например:java.util.logging.FileHandler.pattern = c:/Temp/java%u.log
Задайте уровень ведения журнала драйверов:
Добавьте
com.microsoft.sqlserver.jdbc.level=FINEST
в нижней части следующего раздела:############################################################ # 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
Сохраните изменения.
Файл должен выглядеть следующим образом:
############################################################ # 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
После воспроизведения ошибки верните изменения, чтобы остановить создание файлов средства ведения журнала.
Кроме того, можно создать или скопировать приведенный выше текст, сохранить его в файл и добавить его в команду запуска при загрузке приложения.
java -Djava.util.logging.config.file=c:\<Path to the file>\logging.properties myapp
Это позволит определить файл logging.properties , который не указан в каталогах $JAVA_HOME\conf\
по умолчанию и $JAVA_HOME\jre\lib
с помощью командной строки.
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.