Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
In dit artikel worden java-databaseconnectiviteit (JDBC) en de stappen voor probleemoplossing beschreven die optreden tijdens de configuratie. De focus ligt op JDBC voor SQL Server.
Notitie
- Dit artikel is gebaseerd op het nieuwste JDBC-stuurprogramma (versie 12.4) dat is geïnstalleerd in de hoofdmap van het C-station .
- Microsoft lost geen problemen op met JDBC-verbindingen waar een externe verbindingsgroepbeheerder bestaat. Het oplossen van problemen met een externe verbindingsgroepbeheerder biedt de mogelijkheid om informatie over intellectuele eigendom beschikbaar te maken.
Microsoft JDBC-stuurprogramma voor SQL Server
Dit artikel bevat referentiehandleiding voor JDBC, waaronder het stuurprogramma en de ondersteunende documentatie, installatie-instructies voor verschillende besturingssystemen (OS) en het oplossen van verbindingsproblemen met SQL Server.
Wijzigingen in de versie van het JDBC-stuurprogramma
JDBC-vereisten
De JRE-versie (Java Runtime Environment) moet overeenkomen met het stuurprogramma met de JRE-versie die is opgegeven in de naam. Voor mssql-jdbc-9.4.1.jre8.jar is bijvoorbeeld JRE 1.8 vereist en mssql-jdbc-9.4.1.jre11.jar JRE 11.0 vereist.
CLASSPATH is een Java-omgevingsvariabele die het mappad en binaire JAR-bestanden bevat. Java moet de gewenste toepassing uitvoeren. Het is een vereiste om op te geven welke binaire JAR-bestanden voor stuurprogramma's en afhankelijkheden Java moet worden uitgevoerd. Het minimale aantal
CLASSPATHbevat de huidige werkmap.;en de locatie van het JAR-bestand van het JDBC-stuurprogramma.
Stappen voor JDBC-configuratie en probleemoplossing
De VARIABELE CLASSPATH instellen
CLASSPATHs kunnen worden gedefinieerd in de omgevingsvariabele van het besturingssysteem of in de toepassingsomgeving zelf, zoals Tomcat. Als CLASSPATH deze is gedefinieerd in de toepassingsomgeving, moet de leverancier of ontwikkelaar van de toepassing worden ingeschakeld om ervoor te zorgen dat de juiste CLASSPATH configuraties aanwezig zijn.
Gebruik een van de volgende methoden om in te stellen CLASSPATH:
Notitie
De opdrachtpromptinstelling is tijdelijk en wordt verwijderd wanneer u het opdrachtpromptvenster sluit. De grafische gebruikersinterface (GUI) is een permanente instelling en vereist opnieuw opstarten.
Voorbeeld van opdrachtprompt
Set CLASSPATH=.;C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar
GUI-voorbeeld
Voer de volgende stappen uit om deze in te stellen CLASSPATH met behulp van de GUI:
Open Configuratiescherm en selecteer Systeem en beveiliging.
Selecteer Systeem>geavanceerde systeeminstellingen.
Selecteer Omgevingsvariabelen>Nieuw en voer VERVOLGENS CLASSPATH in als de naam van de variabele.
Selecteer Bewerken en voer .; C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar als variabelewaarde.
Selecteer OK.
Verbindingsreeksen met doorgegeven referenties
Een verbindingsreeks met doorgegeven referenties verwijst naar een verbindingsreeks met verificatiereferenties (zoals gebruikersnaam en wachtwoord) als parameters of waarden in de tekenreeks. Wanneer een programma verbinding maakt met een database of een andere service, moet het verificatiegegevens opgeven om een beveiligde verbinding tot stand te brengen.
In de volgende verbindingsreeks ziet u een voorbeeld van hoe u verbinding maakt met een SQL Server-database op basis van de verificatiemodus die u wilt gebruiken:
SQL Server-verificatie
Verbindingsreeks is String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MySQLAuthAccount>;password=<MyPassword>;trustServerCertificate=true;"
Windows AD-verificatie zonder geïntegreerde beveiliging
Verbindingsreeks is String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Windows AD-verificatie met Kerberos en zonder geïntegreerde beveiliging
Verbindingsreeks is String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos"
Geïntegreerde NTLM-verbinding
In dit type verbinding moet de clientcomputer zich in een Windows-domein bevinden.
Het bestand mssql-jdbc_auth-version-arch>><<.dll moet zich in de volgende paden bevindt:
64-bits DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll32-bits DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
U kunt het pad wijzigen en toevoegen of het bestand kopiëren naar een al bestaand pad. Zie Verbinding maken met geïntegreerde verificatie in Windows voor meer informatie.
Verbindingsreeks is String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Geïntegreerde Kerberos-verbindingen
De vereisten voor dit type verbinding zijn:
- Moet deel uitmaken van een domein.
- SSSD moet zijn geïnstalleerd en geconfigureerd in het Linux-besturingssysteem.
- Klist moet zijn geïnstalleerd en geconfigureerd in het Linux-besturingssysteem.
Het bestand mssql-jdbc_auth-version-arch>><<.dll moet zich in de volgende paden bevindt. U kunt het pad wijzigen en toevoegen of het bestand kopiëren naar een al bestaand pad.
64-bits DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll32-bits DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
U moet ook een Jaas.conf-bestand maken. Dit bestand wordt standaard niet geleverd met het stuurprogramma en wordt niet geïnstalleerd met Java. Gebruik een van de volgende methoden om de omgeving te helpen dit bestand te vinden:
Notitie
Met het bestand Jaas.conf kan Java de huidige context van de aangemelde gebruiker gebruiken. Het vertelt Java ook dat de momenteel in de cache opgeslagen Kerberos-tickets moeten worden gebruikt.
Wijzig de volgende regel in het Java.Security-bestand :
# Default login configuration file login.config.url.1=C:=\<Path to the File>\jaas.confU kunt ook het Jaas.conf-bestand toevoegen via een parameter wanneer u uw omgeving of toepassing laadt. Zorg ervoor dat u dezelfde parameter gebruikt wanneer u het Java-bestand compileert:
javac -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp.java java -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp
Als u een verbinding met een SQL Server tot stand wilt brengen met behulp van geïntegreerde Kerberos-verificatie, configureert u het bestand Jaas.conf :
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Verbindingsreeks is String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos;"
Voorbeeldcode
Alle JDBC-stuurprogramma's worden geleverd met voorbeeldcode in de map \sqljdbc_12.4\enu\samples . De meest gebruikte is in \sqljdbc_12.4\enu\samples\connections\ConnectURR.java. Maak een bestand met de naam ConnectURL.java of gebruik ConnectURL.java uit het voorbeeld dat bij het stuurprogramma is geleverd.
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(); }
}
}
Tracering van JDBC-stuurprogramma's
Over het algemeen willen we altijd tracering FINEST instellen op voor meer informatie. Er zijn twee methoden voor het traceren van stuurprogramma's: tracering programmatisch inschakelen en tracering inschakelen met behulp van het bestand logging.properties.
Als u ervoor kiest om het bestand logging.properties te gebruiken, moet u de juiste omgeving vinden voor het bestand logging.properties . $JAVA_HOME\conf\ en $JAVA_HOME\jre\lib zijn twee mogelijke locaties.
Volg deze stappen om dit bestand te configureren:
Wijzig het bestand logging.properties om ervoor te zorgen dat het lijkt op de volgende globale eigenschappen:
############################################################ # 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= INFOHandlers vertellen Java waar de uitvoer moet worden geëxporteerd. Er zijn twee locaties waar FileHandler naar een bestand schrijft en ConsoleHandler schrijft naar een consolevenster. De uitvoer produceert veel gegevens, dus deze moeten naar een bestand worden geschreven.
Opmerkingsregel
#handlers= java.util.logging.ConsoleHandlerOpmerkingsregel ongedaan maken
handlers= java.util.logging.FileHandler
Notitie
Ingesteld
.levelopOFFen u ziet geen berichten in het consolevenster..level=OFFStel de specifieke FileHandler-logboekregistratie in:
############################################################ # 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]%nWijzig dit gedeelte om ervoor te zorgen dat het lijkt op of de volgende regels bevat:
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 = FINESTWijzig de
java.util.logging.FileHandler.pattern = %h/java%u.logregel en vervang deze door%h/een pad dat u wilt opslaan in het bestand. Bijvoorbeeld:java.util.logging.FileHandler.pattern = c:/Temp/java%u.logStel het logboekregistratieniveau van het stuurprogramma in:
Voeg
com.microsoft.sqlserver.jdbc.level=FINESTonder aan de volgende sectie toe:############################################################ # 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 = SEVEREDe wijzigingen opslaan.
Het bestand moet er als volgt uitzien:
############################################################ # 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
Nadat de fout is gereproduceert, herstelt u de wijzigingen om te voorkomen dat de logboekregistratie bestanden maakt.
U kunt de bovenstaande tekst ook maken of kopiëren, opslaan in een bestand en het bestand toevoegen aan de opstartopdracht bij het laden van de toepassing.
java -Djava.util.logging.config.file=c:\<Path to the file>\logging.properties myapp
Hiermee kunt u een bestand logging.properties identificeren dat niet is opgegeven in de standaardmappen $JAVA_HOME\conf\ en $JAVA_HOME\jre\lib via een opdrachtregel.
Disclaimerinformatie van derden
De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.