Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQL Server 2008连接到Java:由于用户错误而登录失败_Java_Sql_Sql Server_Sql Server 2008_Jdbc - Fatal编程技术网

将SQL Server 2008连接到Java:由于用户错误而登录失败

将SQL Server 2008连接到Java:由于用户错误而登录失败,java,sql,sql-server,sql-server-2008,jdbc,Java,Sql,Sql Server,Sql Server 2008,Jdbc,我正在尝试将Java代码连接到Microsoft SQL Server 2008 R2 Express数据库。我已经下载了MicrosoftSQLServerJDBC驱动程序3.0,并将sqljdbc4.jar添加到我的类路径中。我正在使用Netbeans,并且在我的项目中也包含了sqljdbc4.jar 我在SQLServerManagementStudio中创建了一个名为TestDB1的数据库,并添加了一些用于测试的列和值。通过右键单击服务器JACOB=PC\SQLEXPRESS->Prop

我正在尝试将Java代码连接到Microsoft SQL Server 2008 R2 Express数据库。我已经下载了MicrosoftSQLServerJDBC驱动程序3.0,并将sqljdbc4.jar添加到我的类路径中。我正在使用Netbeans,并且在我的项目中也包含了sqljdbc4.jar

我在SQLServerManagementStudio中创建了一个名为TestDB1的数据库,并添加了一些用于测试的列和值。通过右键单击服务器JACOB=PC\SQLEXPRESS->Properties->Secuity并从Windows身份验证模式更改为SQL server和Windows身份验证模式,我改变了Windows身份验证模式

然后,我右键单击窗口资源管理器中JACOB-PC/SQLEXPRESS->Secuity folder->Logins文件夹下的login文件夹,创建了一个新登录名,并添加了一个新登录名。我给它取名为jhaip2,切换到sqlserver身份验证,并将密码设置为jacob。未选中强制密码策略和强制密码过期。默认数据库设置为TestDB1。然后在TestDB1->Secuity->Users->jhaip2->Database role membership下,我将jhaip2设置为db_owner(如果不这样做,我就无法登录到management studio中的数据库,这可能不是正确的做法?)。然后我重新启动了服务器

现在对于我的java代码,它基本上是JDBC驱动程序3.0示例代码的直接副本,除了没有windows身份验证之外

package databasetest1;

import java.sql.*;

public class connectURL {

   public static void main(String[] args) {

      // Create a variable for the connection string.
      String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=TestDB1;";

      // Declare the JDBC objects.
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;

      try {
         // Establish the connection.
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         System.out.println("Driver okay");
         con = DriverManager.getConnection(connectionUrl,"jhaip2","jacob");
         System.out.println("Connection Made");

      }

      // Handle any errors that may have occurred.
      catch (Exception e) {
         e.printStackTrace();
      }
      finally {
         if (rs != null) try { rs.close(); } catch(Exception e) {}
         if (stmt != null) try { stmt.close(); } catch(Exception e) {}
         if (con != null) try { con.close(); } catch(Exception e) {}
      }
   }
}
当我运行时,它会打印出“驱动程序正常”,所以我假设我的驱动程序设置正确。然后打印错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'jhaip2'.

不管我使用什么用户名,它总是失败。我有一种感觉,我设置的用户是错误的。如果有人能给我一些关于如何正确设置用户的帮助或关于如何简单地连接到Java中的SQL Server数据库的指导,我将不胜感激。

其他问题是否也可能是相同的问题:


您必须确保SQL Server正在侦听正确的端口,然后才能使用JDBC通过TCP连接进行连接。

当我查看SQL Server日志文件时,它说我无法登录,因为SQL Server处于Windows身份验证模式,即使在程序中设置为混合身份验证模式

安装时,我已将其设置为Windows身份验证模式,但更改程序中的设置不会将其从Windows身份验证模式更改

我从我的计算机上删除了SQL Server 2008和所有相关程序,并安装了一个新的副本,这次使用了SQL Server身份验证。现在一切正常。我不知道为什么SQL Server在更改身份验证模式时出现问题,但它现在可以工作了,所以我很高兴

  • 通过选择数据库来运行此查询

     CREATE LOGIN aaron792 WITH PASSWORD='12345'
     USE BudgetAuthorization
     CREATE USER aaron792
    
    我用aaron792你应该用你的

  • 在sql server management studio中,转到对象资源管理器,右键单击(本地)(sql server xxx),然后转到属性。它将打开服务器属性,然后转到安全,并将服务器身份验证模式从仅windows更改为sql server或windows(第二个选项)

  • 在“服务器属性”中,转到“权限”,从“登录名”或“规则”列表中选择“新建用户”,然后在其下方选中“显式规则”中授予的所有选项

  • 打开SQL server配置管理器并->SQL server服务 在第一行SQL server右键单击并打开属性,然后将内置帐户更改为本地系统


  • 然后重新启动每件事,确保它正在运行。然后试试你的代码

    我遇到了同样的问题。谢谢你,jhaip,为我指明了正确的方向:SQL Server处于Windows身份验证模式


    我只想补充一点,没有必要重新安装SQL server和所有相关程序。只需要更改身份验证模式。查看此答案以了解更多详细信息:

    我知道这已经得到了回答,但我想稍微改变一下而不必重新安装整个
    SQLSERVER
    RDBMS。 其概念是更改您尝试连接到的sqlserver实例的属性

  • 第一步。打开
    sqlmanagementstudio
    并从对象资源管理器中选择sqlserver实例

    • 右键单击实例并从弹出菜单中选择properties,弹出菜单将打开服务器属性窗口
    • 选择页面右侧的安全选项。然后将服务器身份验证从
      Windows身份验证模式
      更改为
      SQL server和Windows身份验证模式(混合模式)
    • 然后选择
      权限
      选项。然后在选择权限的情况下,选择要授予权限的登录帐户。(在此之前应创建登录帐户,请查看本教程。版本可能与您拥有的版本不同,但概念或工作流程保持不变。)。在“权限”下,选择“明确的”选项卡,在“授予”下,选择所有选项
    • 单击“确定”
  • 第二步:配置RDBMS以使用内部创建的登录帐户。因此:

    • 打开/启动SQLSERVER配置管理器
    • 从左窗格中选择
      SQL SERVER服务
    • 选中该选项后,移动到右侧窗格,右键单击
      SQL Server(MSSQLSERVER)
      选项,然后从弹出菜单中选择属性
    • SQL Server(MSSQLSERVER)属性窗口出现,确保选择了
      登录
      选项卡,然后在
      登录为:
      选项下选择名为
      内置帐户
      的单选按钮。然后从组合框中选择,
      本地系统
    • 单击“确定”。单击ok,您将被要求重新启动实例,继续重新启动它。如果未要求重新启动,则转至下面的第三步
  • 第三步:重新启动SQLSERV
     USE [master]
     GO
     EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
     GO