Java 无法使用jdbc在windows身份验证模式下连接到ms sql server 2005

Java 无法使用jdbc在windows身份验证模式下连接到ms sql server 2005,java,sql,sql-server,jdbc,Java,Sql,Sql Server,Jdbc,我正在尝试使用jdbc连接到msq sql server 2005。sql server 2005安装在本地系统中,我正在以以下方式进行尝试。但如果我写入本地系统的ip地址而不是本地主机,则会失败。原因是什么 import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;

我正在尝试使用jdbc连接到msq sql server 2005。sql server 2005安装在本地系统中,我正在以以下方式进行尝试。但如果我写入本地系统的ip地址而不是本地主机,则会失败。原因是什么

import java.io.File;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;
import java.sql.ResultSet;  
import java.sql.Statement;  


public class mssql {  
    public static void main(String[] args) {  
        try {  
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();

            Connection connection=DriverManager.getConnection("jdbc:sqlserver://192.168.1.207:1433;databaseName=WindProfiles;integratedSecurity=true;");// If i write localhost instead of 192.168.1.207 then works else shows error
            if(!(connection==null))
            {
                System.out.println("connected");
            }

//            


        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  
错误

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ''. The user is not associated with a trusted SQL Server connection. ClientConnectionId:932514a0-5e3d-4d9c-8080-1e83ec703f9f
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at mssql.main(mssql.java:14)
我知道我可以编写127.0.0.1而不是本地系统,但我的想法是连接到远程系统。 当我在命令提示符telnet 192.168.1.207 1433中写入时,它就连接了。甚至它也从远程系统连接。

您缺少数据库的
用户名
密码
,因此出现此错误。使用以下方法解决您的问题:

Connection connection = DriverManager.getConnection("jdbc:sqlserver://192.168.1.207:1433;databaseName=WindProfiles","username","password");
已更新

如果您希望使用windows身份验证进行连接,请参阅以下链接:(但我没有使用java的windows身份验证模式的经验)


  • 我知道有几种方法可以对MSSQL执行集成安全性,您使用的连接字符串选项我不熟悉(可能对java有效,我不知道)。以下是我知道的使用受信任连接的选项:

    Trusted_Connection=True

    integratedsecurity=SSPI

    尝试将连接字符串的
    integratedSecurity=true
    部分替换为其中一个,然后查看它是否有效


    编辑

    是否可以尝试使用以下代码添加另一个捕获:

    catch (SQLException se) {
          do {
             System.out.println("SQL STATE: " + se.getSQLState());
             System.out.println("ERROR CODE: " + se.getErrorCode());
             System.out.println("MESSAGE: " + se.getMessage());
             System.out.println();
             se = se.getNextException();
          } while (se != null);
       }
    
    您也可以尝试下面的建议,这也是我正在考虑的:


    @Kalathoki是的,我在问题(就在错误下方)中提到过。您是否遵循了我在中建议的检查表?错误意味着远程服务器无法识别您的登录名。您的客户端进程运行在哪个Windows帐户中?这是一个域帐户吗?如果您使用的是本地Windows帐户,Windows身份验证将无法工作。@cdoubleplusgoodm我尝试了您所说的方法,结果显示“Msg 18452,级别14,状态1,服务器DGSXXX,用户第1行登录失败”。该用户与可信的SQL Server连接没有关联。@cdoubleplusgood您说了什么“您的客户端进程运行在哪个Windows帐户中?这是一个域帐户吗?如果您使用的是本地Windows帐户,Windows身份验证将无法工作。“我不理解这些问题。早些时候我在使用mysql,前天我开始使用ms sql server。请详细说明您的问题。请检查您是否已使用IP地址更新了系统的主机文件。同样如@Kalathoki post中所述,使用用户名和密码更新您的DriverManager。@Kalathoki如我在问题中所述,我正在尝试windows身份验证模式。如果是sql server身份验证,则用户名和密码将存在,但在windows身份验证中没有此类用户名和密码。@AKV我没有得到这一行,“请检查您是否用IP地址更新了系统的主机文件”,尝试使用jtds驱动程序而不是jdbc驱动程序。。另外请注意,这可能会有一些帮助。@java初学者我还没有使用Windows身份验证模式。我可以知道使用windows身份验证模式的原因吗?。您是否尝试过在windows身份验证模式下使用localhost:1433?如果是这样,您可以连接吗?我尝试了这两种方法,但都不起作用,显示了以下错误“用户'DGSXXX\spanwave'登录失败”。ClientConnectionId:528fc0b9-82c5-4c94-99f7-ee4fc29bae3b”。另外,您使用的是什么版本的jdbc?可能想尝试使用jdbc4,看看是否有帮助。我使用sqljdbc4.jar。请看,我刚刚创建了一个本地数据库,并尝试在windows身份验证中使用jdbc进行连接。它成功了。现在我想连接到远程服务器,但失败了。这是按照您的建议添加catch后得到的输出。“SQL状态:S0001错误代码:18456消息:用户'DGSXXX\spanwave'登录失败。此连接中的ClientConnectionId:474f9c07-42c8-4bef-9c0e-a54bfd26df71”连接=DriverManager.getConnection(“jdbc:sqlserver://192.168.1.207:1433;databaseName=WindProfiles;integratedSecurity=true;“”;//如果我写的是localhost而不是192.168.1.207,则有效,否则显示错误如果我写的是localhost,则有效,但如果我给出的是本地ip地址,则无效,为什么?