与SQL Server数据库的Java连接:用户登录失败';sa';

与SQL Server数据库的Java连接:用户登录失败';sa';,java,sql-server,Java,Sql Server,我正在尝试连接到使用SQL Server 2012创建的数据库,但不断收到错误。这是连接的代码: Driver d = (Driver)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=Tema6;user=sa;password=123456";

我正在尝试连接到使用SQL Server 2012创建的数据库,但不断收到错误。这是连接的代码:

Driver d = (Driver)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=Tema6;user=sa;password=123456";
        java.sql.Connection con = DriverManager.getConnection(DB_URL);
这就是我得到的错误:

Login failed for user 'sa'. ClientConnectionId:e6335e64-ca68-4d72-8939-5b7ded951424
我已从SQL Server配置中启用TCP/IP协议,我确信“sa”帐户已启用,并且密码正确。有人能帮我吗

编辑:这是整个堆栈跟踪

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'sa'. ClientConnectionId:e6335e64-ca68-4d72-8939-5b7ded951424
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 Connection.main(Connection.java:12)
EDIT2:用jTDS替换驱动程序后:

java.sql.SQLException: Login failed for user 'sa'.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2893)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2335)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:609)
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:369)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Connection.main(Connection.java:19)
java.sql.SQLException:用户“sa”登录失败。
位于net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
位于net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2893)
位于net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2335)
位于net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:609)
位于net.sourceforge.jtds.jdbc.JtdsConnection。(JtdsConnection.java:369)
位于net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
at Connection.main(Connection.java:19)

我还没有真正检查您的堆栈跟踪,但人们通常会忘记允许远程连接到服务器。尝试右键单击服务器实例(对象资源管理器)>属性>连接,然后选中“允许远程连接到此服务器”

我认为这不是驱动程序问题,因为消息表明已尝试验证,但验证失败,因此至少已成功连接

我要问的第一个(基本)问题是,您是否确定“123456”是sa帐户的正确密码?通过以“sa”身份登录SQLServerManagementStudio进行测试

接下来,我将尝试在SQL Server中创建一个用户,并在连接字符串中提供这些凭据(正如Brandon所建议的那样)

接下来(为了好玩),我将启用混合模式身份验证,并尝试在连接字符串中使用我的windows用户帐户凭据

这些是我过去为在SQLServer中配置网络而编写的一些说明。绝对值得再次检查设置:

配置SQL Server网络
开箱即用,SQL Server 2008 Express不支持固定端口上的TCP连接。要解决这个问题: 从windows开始菜单打开“SQL Server配置管理器” 在“SQL Server网络配置”-->“SQLEXPRESS协议”下 打开TCP/IP属性 在“协议”选项卡上 将启用设置为是 在“IP地址”选项卡上,滚动至底部 在“IP全部”下 将TCP端口更改为1433 确保TCP动态端口为空,删除零 单击应用

在SQL Server Management Studio中检查: 从服务器实例右键单击并选择属性
在安全选项下:确保选中“SQL Server和Windows身份验证模式”

此数据库url的格式错误

String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=Tema6;user=sa;password=123456";
不要用这个,试试这个

Connection connection = DriverManager
                .getConnection("jdbc:sqlserver://localhost:1433;\\SQLEXPRESS;databaseName=Tema6","sa","123456");
单击SQL-->单击鼠标右键-->应用-->安全-->勾选SQL server和windows身份验证模式


90%成功

检查配置sql server的端口。如果端口被配置为“动态端口”,并且您试图在默认端口上连接,则会出现这种奇怪的错误

您可以通过尝试通过sqlserver客户端连接到sqlserver来检查这是否是问题所在

  • 将身份验证模式设置为“sql server身份验证”
  • 在服务器字段中以“servername,port”格式输入服务器名和端口
  • 输入用户名和密码,然后单击连接
  • 如果连接未成功,并且您收到确切的错误消息“用户xxx登录失败”,那么这就是问题所在


    转到sql server,选择用户属性并将服务器角色更改为sysadmin解决了此问题。

    请发布连接错误的整个stacktrace以分析可能的问题。真奇怪,stacktrace没有提供足够的信息来检测错误。尝试使用另一个JDBC驱动程序连接到SQL Server数据库引擎,并检查其中的错误。我建议使用。如果添加integratedSecurity=false;到连接字符串?@Brandon我仍然得到相同的错误。@LuiggiMendoza我用您链接的驱动程序替换了驱动程序,但它仍然不起作用。错误消息基本相同。是的,已对其进行检查。在SQL Server配置管理器中,是否已启动SQL Server、SQL Server代理和SQL Server浏览器?1。是的,我仔细检查了密码,它是正确的。2.我创建了另一个用户,并授予了syasdmin角色。不过,结果还是一样。3.我尝试过使用windows身份验证,但同样,在配置SQL Server网络时,我完成了您在尝试连接到DB之前告诉我的所有操作,一切都很好。其余的设置都是默认设置,我没有修改任何其他设置,所以我觉得很奇怪。是的,听起来很奇怪。在这里刮桶:1。如果从连接字符串中删除数据库引用,错误是否会更改?2.尝试使用127.0.0.1作为IP地址3。尝试使用实际的网络ip而不是本地主机4。尝试重新启动5。尝试重新安装!就是这样,我刚离开ideasOk,所以,最后,我放弃了SQL Server,我安装了MySQL Workbench,并使用XAMPP制作了一台服务器(我希望这是正确的术语)。这一次,一切都解决了,我现在可以继续使用我的Java应用程序了。谢谢你们的准备。拯救了这一天!我当时正在指定jdbc端口,在登录失败的消息中浪费了数小时的时间。从接头上拆下端口,动臂全部固定