如何解决;登录失败";错误(JDBC Java),仅在Windows身份验证的两种情况之一失败

如何解决;登录失败";错误(JDBC Java),仅在Windows身份验证的两种情况之一失败,java,sql,sql-server,jdbc,Java,Sql,Sql Server,Jdbc,我有Java代码,它使用JDBC连接到我公司的两个数据库。管理员将这两个权限都授予我作为Windows自动验证。我可以使用SQL Server Management Studio完美地连接两个数据库并与之交互。问题是,我只能使用java中JDBC的第一个数据库,因为尝试连接到第二个数据库会导致“无法打开数据库”错误 这很奇怪,因为我可以完美地处理第一个数据库,而两个数据库的主服务器是相同的。我有JDBC驱动程序和Windows身份验证所需的sqljdbc_auth.dll文件。我使用模块化方法来

我有Java代码,它使用JDBC连接到我公司的两个数据库。管理员将这两个权限都授予我作为Windows自动验证。我可以使用SQL Server Management Studio完美地连接两个数据库并与之交互。问题是,我只能使用java中JDBC的第一个数据库,因为尝试连接到第二个数据库会导致“无法打开数据库”错误

这很奇怪,因为我可以完美地处理第一个数据库,而两个数据库的主服务器是相同的。我有JDBC驱动程序和Windows身份验证所需的
sqljdbc_auth.dll
文件。我使用模块化方法来避免类型错误。以下是代码(出于安全原因,我在XXX中更改了一些字符):

预期结果是两个数据库的连接都正确。但是,只有第一个连接成功,并且打印从数据库表获得的值,而第二个连接失败,如控制台输出所示:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite

URL connection: jdbc:sqlserver://XXXXVPRUBDSQL01\XXXXDCESQL:1441;databaseName=FacturaElectronicav2;integratedSecurity=true
The conenction was created succesful because this was printed
Value: 1CE9AAB6-DEC4-481F-81E9-45DAB1D018CC // The value obtained from the statement is correct

Here goes the connection failure in the second database

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "SISECPrueba" requested by the login. The login failed. ClientConnectionId:d122e604-a8e2-4fa7-b1dc-aec3f6e6d9fd
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:213)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2242)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2228)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5574)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1734)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1355)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1022)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:858)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:270)
        at Auto.Test7.startSQLconnection(Test7.java:86)
        at Auto.Test7.test(Test7.java:56)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
        at org.testng.TestRunner.privateRun(TestRunner.java:648)
        at org.testng.TestRunner.run(TestRunner.java:505)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
        at org.testng.SuiteRunner.run(SuiteRunner.java:364)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
        at org.testng.TestNG.runSuites(TestNG.java:1049)
        at org.testng.TestNG.run(TestNG.java:1017)
        at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:283)
        at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
        at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:120)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
问题似乎是与第二台服务器的特定数据库SISECPrueba的连接,因为服务器实例是正确的


最后,正如我前面提到的,我可以使用windows应用程序SQL Server Management Studio正常访问这两台服务器。

尝试修改方法
公共连接startSQLconnection(字符串URL)抛出异常{return DriverManager.getConnection(URL);}
并将连接保存到不同的变量
connection1
connection2
“两个数据库的主服务器是相同的”,这实际上并不相关:它们是两个不同的SQL server实例,可以具有不同的配置。它们托管在同一台计算机上的事实并不能改变这两台SQL Server是不同的事实。@MarkrotVeel感谢您的澄清:D@Max,我按照你的建议做了,但遗憾的是,没有成功:(,错误保持不变。我升级了问题中的上述代码。实际上代码是相同的。两个SQL Server服务用户是相同的?如果颠倒连接顺序,结果是相同的?
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite

URL connection: jdbc:sqlserver://XXXXVPRUBDSQL01\XXXXDCESQL:1441;databaseName=FacturaElectronicav2;integratedSecurity=true
The conenction was created succesful because this was printed
Value: 1CE9AAB6-DEC4-481F-81E9-45DAB1D018CC // The value obtained from the statement is correct

Here goes the connection failure in the second database

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "SISECPrueba" requested by the login. The login failed. ClientConnectionId:d122e604-a8e2-4fa7-b1dc-aec3f6e6d9fd
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:213)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2242)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2228)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5574)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1734)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1355)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1022)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:858)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:270)
        at Auto.Test7.startSQLconnection(Test7.java:86)
        at Auto.Test7.test(Test7.java:56)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
        at org.testng.TestRunner.privateRun(TestRunner.java:648)
        at org.testng.TestRunner.run(TestRunner.java:505)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
        at org.testng.SuiteRunner.run(SuiteRunner.java:364)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
        at org.testng.TestNG.runSuites(TestNG.java:1049)
        at org.testng.TestNG.run(TestNG.java:1017)
        at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:283)
        at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
        at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:120)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)