2

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

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 中写入时,它会连接。即使它也从远程系统连接。 在此处输入图像描述

4

2 回答 2

1

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

Trusted_Connection=True

Integrated Security=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);
   }

您也可以尝试遵循此处的建议,这就是我正在查看的内容:

http://msdn.microsoft.com/en-us/library/ms378522.aspx

于 2013-09-24T05:10:31.463 回答
1

您缺少数据库usernamepassword因此您收到此错误。使用以下解决您的问题:

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

更新

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

  1. 从 Java 连接到 SQL Server
于 2013-09-24T04:17:00.437 回答