10

我试图测试与本地 sql DB 的连接。我有这个代码:

try{
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;user=SOSCOMP");

}catch(Exception e){
    System.out.println("Couldn't get database connection.");
    e.printStackTrace();
}

我尝试了很多用户。我的 Windows 用户是 SOSCOMP,没有密码。我也知道 SQL 2008 将用户创建为“sys”“dbo”,我也尝试过这些。我总是得到:

Couldn't get database connection.
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'SOSCOMP'.

    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
    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:2532)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1929)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1917)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1061)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at FT_Receiver.FT_Receiver.main(FT_Receiver.java:12)

有任何想法吗?

谢谢

4

5 回答 5

21

如果您尝试连接使用 Windows 身份验证的数据库,您可以在连接字符串中使用“integratedSecurity”选项。

DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;integratedSecurity=true;");
于 2012-10-07T13:27:42.800 回答
8

最近经历了这个,我为解决几乎相同的问题所采取的步骤是

  1. 使用 SQL Server Management Studio 以所需帐户登录并确认读取权限(必要时可写入)
  2. 使用 SQL Server 配置管理器确认服务器实例正在侦听目标 IP 地址
  3. 禁用防火墙以检查是否没有妨碍(并在必要时添加例外以供将来使用)

对我来说,最重要的是了解实例设置为侦听的 IP 地址和端口,这样当我构建连接字符串时,连接就不会被拒绝。

此外,如果您想使用 Windows 登录进行连接,您需要确保 SQL 实例配置为混合模式身份验证(即允许 Windows 和 SQL 登录)

于 2012-10-07T13:22:42.783 回答
4

由于您收到此错误,因此 Sql 服务器正确侦听该端口。

  1. 打开 Sql Server Management Studio 连接到您的服务器。
  2. 右键单击服务器的图标并选择属性。
  3. 转到安全选项卡并勾选 Sql Server 和 Windows 身份验证模式。

如果要定义用户,请从树中转到 Security->Logins,右键单击 logins 文件夹,然后单击“New Login”。

现在您的服务器应该可以使用这个 Url String。使用可以帮助您了解其工作的服务器的日志文件。

于 2017-05-01T07:04:44.920 回答
1

回复:做到了。仍然警告:无法加载 sqljdbc_auth.dll 原因:- java.library.path 中没有 sqljdbc_auth – Mike 10 月 7 日 14:03

如果您从 shell 运行,则必须通过在 Eclipse 或命令行中的 VM 参数下添加此路径来添加 sqljdbc_auth.dll 的路径:-Djava.library.path="\MS SQL Server JDBC Driver 3.0\sqljdbc_3.0\enu \auth\x86"

那是如果您运行的是 32 位 Windows。否则最终的子目录会相应改变。

我认为这可能是一个更好的答案,设置基于 SQL Server 用户的身份验证: Connecting SQL Server 2008 to Java: Login failed for user error

(我试着在这里总结一下:http: //silveira.wikidot.com/sql-server

于 2012-11-22T05:29:35.633 回答
0

我也遇到了同样的问题,在我的情况下,以下内容配置错误

  1. 我的系统中正在运行两个 SQL(版本)服务器 --> Sol: 请检查我们所指向的服务器。
  2. 端口配置为动态 --> Sol:如果我们连接到特定端口,我们应该设置端口 1433 和动态端口应该是 0。
  3. 在创建新登录名(用户)时,我选择了选项“第一次登录后更改密码”--> Sol:如果我们尝试从其他服务(如 Openfire)进行连接,则在创建新登录名时不应选择此选项。
于 2021-03-03T07:18:48.247 回答