Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I den här artikeln beskrivs Java-databasanslutning (JDBC) och de felsökningssteg som inträffar under konfigurationen. Fokus ligger på JDBC för SQL Server.
Kommentar
- Den här artikeln baseras på den senaste JDBC-drivrutinen (version 12.4) som är installerad i C-enhetens rot.
- Microsoft felsöker inte JDBC-anslutningar där det finns en poolhanterare från tredje part. Felsökning med en anslutningspoolshanterare från tredje part har potential att exponera information om immateriella rättigheter.
Microsoft JDBC-drivrutin för SQL Server
Den här artikeln innehåller referensguide till JDBC, inklusive drivrutinen och stöddokumentationen, installationsinstruktioner för olika operativsystem (OS) och felsökning av anslutningsproblem med SQL Server.
Ändringar i JDBC-drivrutinsversionen
JDBC-krav
JrE-versionen (Java Runtime Environment) måste matcha drivrutinen med den JRE-version som anges i namnet. Mssql-jdbc-9.4.1.jre8.jar kräver till exempel JRE 1.8 och mssql-jdbc-9.4.1.jre11.jar kräver JRE 11.0.
CLASSPATH är en Java-miljövariabel som innehåller katalogsökvägen och binära jar-filer. Java behöver det för att köra önskat program. Det är ett krav att ange vilken drivrutin och beroende binär jar-filer Java behöver köra. Minimum
CLASSPATHinkluderar den aktuella arbetskatalogen.;och platsen för JDBC-drivrutins jar-filen.
JDBC-konfigurations- och felsökningssteg
Ange CLASSPATH-variabeln
CLASSPATH:er kan definieras i os-miljövariabeln eller i själva programmiljön, till exempel Tomcat. Om CLASSPATH definieras i programmiljön måste programleverantören eller utvecklaren vara engagerade för att säkerställa att rätt CLASSPATH konfigurationer finns på plats.
Om du vill ange CLASSPATHanvänder du någon av följande metoder:
Kommentar
Kommandotolkens inställning är tillfällig och tas bort när du stänger kommandotolken. Det grafiska användargränssnittet (GUI) är en permanent inställning och kräver en omstart.
Exempel på kommandotolk
Set CLASSPATH=.;C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar
GUI-exempel
Följ dessa steg om du vill ange CLASSPATH med hjälp av användargränssnittet:
Öppna Kontrollpanelen och välj System och säkerhet.
Välj System>Avancerade systeminställningar.
Välj Miljövariabler>Ny och ange sedan CLASSPATH som variabelnamn.
Välj Redigera och ange .; C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar som variabelvärde.
Välj OK.
Anslutningssträngar med inloggade autentiseringsuppgifter
En anslutningssträng med skickade autentiseringsuppgifter refererar till en anslutningssträng som innehåller autentiseringsuppgifter (till exempel användarnamn och lösenord) som parametrar eller värden i strängen. När ett program ansluter till en databas eller en annan tjänst måste det tillhandahålla autentiseringsinformation för att upprätta en säker anslutning.
Följande anslutningssträng visar ett exempel på hur du ansluter till en SQL Server-databas baserat på det autentiseringsläge som du vill använda:
SQL Server-autentisering
Anslutningssträngen är String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MySQLAuthAccount>;password=<MyPassword>;trustServerCertificate=true;"
Windows AD-autentisering utan integrerad säkerhet
Anslutningssträngen är String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Windows AD-autentisering med Kerberos och utan integrerad säkerhet
Anslutningssträngen är String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos"
Integrerad NTLM-anslutning
I den här typen av anslutning måste klientdatorn finnas i en Windows-domän.
Filen mssql-jdbc_auth-version-arch<>><.dll måste finnas i följande sökvägar:
64-bitars DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll32-bitars DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Du kan antingen ändra och lägga till sökvägen eller kopiera filen till en redan etablerad sökväg. Mer information finns i Ansluta med integrerad autentisering i Windows.
Anslutningssträngen är String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Integrerade Kerberos-anslutningar
Förutsättningarna för den här typen av anslutning är:
- Måste vara en del av en domän.
- Måste ha SSSD installerat och konfigurerat på Linux OS.
- Klist måste vara installerat och konfigurerat i Linux-operativsystemet.
Filen mssql-jdbc_auth-version-arch<>><.dll måste finnas i följande sökvägar. Du kan antingen ändra och lägga till sökvägen eller kopiera filen till en redan etablerad sökväg.
64-bitars DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll32-bitars DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Du måste också skapa en Jaas.conf-fil . Som standard kommer den här filen inte med drivrutinen och installeras inte med Java. Använd någon av följande metoder för att hjälpa miljön att hitta den här filen:
Kommentar
Jaas.conf-filen gör att Java kan använda den inloggade användarens aktuella kontext. Det uppmanar också Java att använda de för närvarande cachelagrade Kerberos-biljetterna.
Ändra följande rad i Java.Security-filen :
# Default login configuration file login.config.url.1=C:=\<Path to the File>\jaas.confDu kan också lägga till jaas.conf-filen via en parameter när du läser in din miljö eller ditt program. Se till att du använder samma parameter när du kompilerar Java-filen:
javac -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp.java java -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp
Konfigurera Jaas.conf-filen för att upprätta en anslutning till en SQL Server med kerberos-integrerad autentisering:
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Anslutningssträngen är String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos;"
Exempelkod
Alla JDBC-drivrutiner levereras med exempelkod i katalogen \sqljdbc_12.4\enu\samples . Den vanligaste är i \sqljdbc_12.4\enu\samples\connections\ConnectURR.java. Skapa en fil med namnet ConnectURL.java eller använd ConnectURL.java från exemplet som medföljer drivrutinen.
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-drivrutinsspårning
I allmänhet vill vi alltid ange spårning till FINEST för mer information. Det finns två metoder för spårning av drivrutiner: aktivera spårning programmatiskt och aktivera spårning med hjälp av filen logging.properties.
Om du väljer att använda filen logging.properties måste du hitta rätt miljö för filen logging.properties . $JAVA_HOME\conf\ och $JAVA_HOME\jre\lib är två möjliga platser.
Följ dessa steg för att konfigurera den här filen:
Ändra filen logging.properties så att den liknar följande globala egenskaper:
############################################################ # 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= INFOHanterare talar om för Java var utdata ska exporteras. Det finns två platser där FileHandler skriver till en fil och ConsoleHandler skriver till ett konsolfönster. Utdata genererar massor av data, så de måste skrivas till en fil.
Kommentarsrad
#handlers= java.util.logging.ConsoleHandlerAvkommentarsrad
handlers= java.util.logging.FileHandler
Kommentar
Ange
.leveltillOFFså visas inte meddelanden i konsolfönstret..level=OFFAnge den specifika FileHandler-loggningen:
############################################################ # 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Ändra den här delen för att se till att den liknar eller innehåller följande rader:
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Ändra raden
java.util.logging.FileHandler.pattern = %h/java%u.logoch ersätt%h/med en sökväg som du vill att filen ska lagras på. Till exempel:java.util.logging.FileHandler.pattern = c:/Temp/java%u.logAnge drivrutinsloggningsnivå:
Lägg till
com.microsoft.sqlserver.jdbc.level=FINESTlängst ned i följande avsnitt:############################################################ # 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 = SEVERESpara ändringarna.
Filen bör se ut så här:
############################################################ # 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
När du har återskapat felet återställer du ändringarna för att hindra loggaren från att skapa filer.
Du kan också skapa eller kopiera texten ovan, spara den i en fil och lägga till filen i startkommandot när programmet läses in.
java -Djava.util.logging.config.file=c:\<Path to the file>\logging.properties myapp
På så sätt kan du identifiera en logging.properties-fil som inte har angetts i standardkatalogerna $JAVA_HOME\conf\ och $JAVA_HOME\jre\lib via en kommandorad.
Ansvarsfriskrivning för information från tredje part
De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.