JDBC连接时,用户 'myEclipseUser' 登录失败问题。

neicole 2012-12-01 04:05:44
将自己的检查过程也写出来了,希望大家能耐心看下,谢谢。

连接数据库失败提示信息:

com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'myEclipseUser' 登录失败。 ClientConnectionId:c4d48ca5-b061-4656-

82f1-1dded2979990
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(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at utils.ConnectionDB.getConnection(ConnectionDB.java:24)
at action.ReaderController.save(ReaderController.java:28)
at action.ReaderController.main(ReaderController.java:107)
java.lang.NullPointerException
at action.ReaderController.save(ReaderController.java:33)
at action.ReaderController.main(ReaderController.java:107)


确定代码无误。

之后先检查是否我的SQL服务还没有开启,不过使用 Sql Server Configuration Manager 查看 MSSQLSERVER的协议时,TCP/IP显示“已启用”的状态,并且服务确认已经开启了,另外个人推测,因为已到达用户登陆的步骤,可以排除SQL的TCP服务未开启的问题。

然后,我检查 是否我的SQL的用户权限有误,于是:
我直接开SQL Server 2008的图形界面,使用“身份验证”的方式去登陆,成功使用“myEclipseUser”用户,密码“12345678“登陆。

登陆进去后,
1. “服务器属性”->“安全性”:
“服务器身份验证”->“SQL Server 和 Windows 身份验证模式。
“登录审核”-> “失败和成功的登陆”
2. “服务器角色”:“public”
3. “状态”:设置是否允许连接到数据库引擎->授予,登录->启用。
4. “用户映射”:我所需要的“myEclipseDB”数据库中的成员身份调为“db_owner”和“public”。

纠结,这问题是存在哪呢?


PS:我的代码:(我将sqljdbc4.jar放在\WebRoot\WEB-INF\lib下)

// 获取数据库的连接
public static Connection getConnection() throws ClassNotFoundException{
// 定义连接数据库的URL,数据库名称,登陆数据库的用户名和密码
String url = "jdbc:sqlserver://localhost:1433;";
String dbName = "databaseName=myEclipseDB;";
String user = "user=myEclipseUser;";
String psw = "password=12345678;";
String connectionUrl = url + dbName + user + psw;
// 定义获取联接的对象
Connection conn = null;
try{
// 获取数据库驱动 JDBC 4.0 会自动加载CLASS,因此可以不手动加载
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 获得数据库连接
conn = DriverManager.getConnection(connectionUrl);
// 关闭事务的自动提交
conn.setAutoCommit(false);
return conn;
}catch(SQLException e){
System.out.println("连接数据库失败");
e.printStackTrace();
}
return null;
}



附:关于代码方面,查看过官方文档(如下):
与数据库建立简单连接
使用 sqljdbc.jar 类库时,应用程序必须首先按如下所示注册驱动程序:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

加载驱动程序后,可通过使用连接 URL 和 DriverManager 类的 getConnection 方法来建立连接:

String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;user=MyUserName;password=*****;";
Connection con = DriverManager.getConnection(connectionUrl);
在 JDBC API 4.0 中,DriverManager.getConnection 方法得到了增强,可自动加载 JDBC Driver。因此,使用 sqljdbc4.jar 类库时,

应用程序无需调用 Class.forName 方法来注册或加载驱动程序。

调用 DriverManager 类的 getConnection 方法时,会从已注册的 JDBC Driver 集中找到相应的驱动程序。sqljdbc4.jar 文件包

括“META-INF/services/java.sql.Driver”文件,后者包含 com.microsoft.sqlserver.jdbc.SQLServerDriver 作为已注册的驱动程序

。现有的应用程序(当前通过使用 Class.forName 方法加载驱动程序)将继续工作,而无需修改。

sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。

有关如何连接数据源和使用连接 URL 的详细信息,请参阅创建连接 URL 和设置连接属性。
...全文
522 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
effincalman 2013-05-15
  • 打赏
  • 举报
回复
一样的问题 一样的解决方式 可惜是弄好后才看到这个帖子
neicole 2012-12-04
  • 打赏
  • 举报
回复
终于,问题解决了,能用myEclipseUser这种自定义的用户登陆了,解决方法是 启用 SQL server(SQLEXPRESS) 的端口,(并将里面的IP端口全部改为1433) 禁用 SQL server(MSSQLSERVER) 的端口,(原来这里的全部1433端口也是没有用的)
neicole 2012-12-04
  • 打赏
  • 举报
回复
卸载了SQL2008,不过卸载不干净, 不管,照装SQL2005,装上了,不过2005装了后,只有个配置工具,纠那个结啊,其它工具全不见了, 然后,删了05,再装,还是这个样,据说装SQL2005是要再装上另一个包的,不过在安装包上找了又找,找不着。 于是,还是再用08的安装包装吧,不过,08的又提示装过实例,不能重名,还以为是08没有卸载完遗留下来的,试了几次直接改名行不行,不行。 于是,再删了SQL 2005,装08,这下,总算将08重装装上了,然后,再启动数据库,呃~还是老问题,又提示连不上我自建的那个用户了,再将数据库的权限调了几回,还是不行。 不过,忽然想到在安装过程中,给sa用户设了密码,连myEclipse的时候直接用sa超级用户再加上master数据库,问题总算是暂时解决了,先凑合用着master数据库。
neicole 2012-12-03
  • 打赏
  • 举报
回复
引用 6 楼 hu3402379 的回复:
苦逼程序员
急啊~ 下下周就要检查SSH框架做的东西了,现在连数据库也一直连不上~ 再重装了一次,还是不行~
骚还是公骚骚 2012-12-03
  • 打赏
  • 举报
回复
苦逼程序员
neicole 2012-12-03
  • 打赏
  • 举报
回复
引用 3 楼 eighthgod 的回复:
SQLSERVER 用户有没有可以远程连接的权限
嗯, 我按: http://www.cnblogs.com/xujing/archive/2010/07/30/1788567.html 做过 启动SQL Server Browser service。SQL Server Browser的作用是监听来自Microsoft SQL Server资源的请求 以及提供关于安装在本机上的SQL Server实例的信息。 启用SQL Server 2008 Express的TCP/IP端口以便接受远程连接。 (可选)将授权模式(Server Authentication)改为SQL Server 和Windows Authentication的混合模式。SQL Server 2008 Express默认情况下只允许Windows Authentication模式登陆,即用当前登陆Windows的用户名连接数据库。如果需要使用其他账户连接,则需要手动更改授权模式。 结果还是不行。
neicole 2012-12-03
  • 打赏
  • 举报
回复
引用 2 楼 zzt369880281 的回复:
建议服务全开,各种tcp/ip类似的也全开,还有named什么玩意儿来着,也全开,试一下吧 我记得我当时弄这个东西也是挺难的,弄了好几个小时,弄好了,如果不行你在找我,我也以具体帮你看一下,id是我的QQ号
服务协议方面,本来我是按老师建议,只开TCP/IP的协议, 后来,按网络的步骤,将SQLEXPRESS服务和MSSQLSERVER协议中的 Shared Memory,Named Pipes, TCP/IP 都开了,结果还是不行。 然后呢,今天终于憋不住了,将SQL软件修复过一次,还是不行~
eighthgod 2012-12-02
  • 打赏
  • 举报
回复
SQLSERVER 用户有没有可以远程连接的权限
zzt369880281 2012-12-02
  • 打赏
  • 举报
回复
建议服务全开,各种tcp/ip类似的也全开,还有named什么玩意儿来着,也全开,试一下吧 我记得我当时弄这个东西也是挺难的,弄了好几个小时,弄好了,如果不行你在找我,我也以具体帮你看一下,id是我的QQ号
neicole 2012-12-02
  • 打赏
  • 举报
回复
纠那个结,到现在到还没能解决,真心求救~

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧