在Windows身份验证模式下与MSSQL服务器的JDBC连接

yat*_*nbc 10 java sql-server-2005 jdbc

在我的以下程序中,我尝试在Windows身份验证中使用jdbc连接MSSQL Server.但得到以下错误

import java.io.*;
import java.sql.*;
import java.util.GregorianCalendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

class  Cms_truncate
{
    public static void main(String[] args) 
    {
         Calendar cal = new GregorianCalendar();

         //String name="cmscim";
         //String filename = "D:\\programs\\Tomcat 6.0\\webapps\\timescape\\canteen_scheduller\\CMS_CSV\\cms_cim\\"+ name+"-"+cal.get(Calendar.YEAR) +"-" +(cal.get(Calendar.MONTH)+1) + "-"+cal.get(Calendar.DATE)+".csv";
         Connection conn = null;
         String url = "jdbc:sqlserver://localhost:1433;databasename=CMS_TIMES_MAIN;integratedSecurity=true";
         String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
         String userName = ""; 
         String password = "";
         Statement stmt;
         try
         {

         Class.forName(driver);//.newInstance();
         conn = DriverManager.getConnection(url,userName,password);
         String query = "select * from cim where sapId=10025331";
         stmt = conn.createStatement();
         int flag = stmt.executeUpdate(query);
         System.out.println("flag = "+flag); 
         conn.close();
        System.out.println("");
         } catch (Exception e) {
         e.printStackTrace();
         }

    }
}
Run Code Online (Sandbox Code Playgroud)

我在Windows身份验证模式下使用SQL Server.我是否需要设置其他东西来在Windows身份验证中使用jdbc连接MSSQL.

错误:

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
    at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
    at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
    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 Cms_truncate.main(Cms_truncate.java:28)
Run Code Online (Sandbox Code Playgroud)

小智 14

使用Windows身份验证:

String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01;integratedSecurity=true";
Run Code Online (Sandbox Code Playgroud)

使用SQL身份验证:

String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01";
Run Code Online (Sandbox Code Playgroud)


小智 8

您需要在C:/ windows/System32文件夹中添加sqljdbc_auth.dll.您可以从http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774下载它.

  • 在我看来,将此 dll 放在“Windows\System32”目录中是不正确的。最好放入其他新目录并将其添加到“PATH”变量中。 (2认同)

小智 7

请尝试执行以下步骤:

  1. integratedSecurity=true像这样添加到JDBC URL:

    Url: jdbc:sqlserver://<<Server>>:<<Port>>;databasename=<<DatabaseName>>;integratedsecurity=true 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保在项目构建路径中添加sqljdbc驱动程序4或更高版本(sqljdbc.jar):

    java.sql.DatabaseMetaData metaData = connection.getMetaData();
    System.out.println("Driver version:" + metaData.getDriverVersion());
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为您的项目添加VM参数:

    • 从DB安装的服务器中找到sqljdbc_auth.dll文件(C:\Program Files\sqljdbc_4.0\enu\auth\x86),或从此链接下载。

    • 将dll文件放在您的项目文件夹中,然后指定VM参数,如下所示:VM Argument: -Djava.library.path="<<DLL File path till folder>>"

      注意:检查您的Java版本32/64位,然后相应地添加32/64位版本dll文件。


Abh*_*hah 5

从您的异常跟踪来看,此问题似乎有多种可能性

1)。您必须检查端口“ 1433”是否被防火墙阻止。如果发现它被阻止,则您必须编写“入站规则”。如果在控制面板-> Windows防火墙->高级设置(在左侧找到选项)-> 入站规则中找到它

2)。在SQL Server配置管理器中,您的TCP/IP协议将处于禁用模式。因此,您必须启用它。

  • 谢谢你,小伙伴..!! (2认同)

Nav*_*thy 4

您需要在 Sql Server 配置管理器应用程序中启用 SQL Server TCP/IP 协议。您可以在 SQL Server 网络配置中查看该协议。

  • 答案是正确的,我们需要通过上述路径启用 TCP/IP。但完成此操作后还需要重新启动 SQL Server 服务才能使我们的更改生效。您可以在同一个服务器配置管理器应用程序中找到此服务。 (2认同)