使用 JDBC 连接数据库时候,前些天还好好的,突然就不能用了,报了下边的错误


at com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。 



错误原因是登录失败



第一步:考虑是数据库没有配置为双身份认证模式



经过核实,配置是正确的,没有错误



第二步:考虑是 properties 文件中 sa 用户密码写错了



经过核实,没有错,而且又重新设置了一遍,确定为 123456



第三步:考虑是服务中有些 SQLServer 需要使用的服务没有开启



services.msc 进入服务里边打开了所有和 SQLServer 有关系的服务,然而并没有解决



第四步:考虑是不是端口号没有写对



进到 SQL Server 配置管理器里边核实了 1433 并且启用了TCP/IP 的所有端口,然而依然没有解决



第五步:考虑是不是 SQLServer 2012 版本里边的 URL 格式改变了,不能用 localhost 或者 127.0.0.1 应该用主机名\实例名的方式,于是查到主机名,实例名,修改了URL,然而依然没有卵用



第六步:偶然看到一个网友说,自己在项目的某一个地方修改了 sa 或者 密码值,然而自己没有注意到,于是建议说全项目文件查找关键字 sa 或者 password 或者 user,经查找,无果



第七步:又见一个网友说,无论怎么都找不到原因,所以重新构建了一次工程,重新建了所有的包,类,问题解决了,考虑太麻烦,所以没有采用



第八步:又有网友说,重装一次 SQLServer,想想就觉着工程太浩大了,因为才重装过,装一次花好长时间,而且卸载不干净,之前因为卸载不干净的问题甚至重装了系统进行干净安装,实在心累,所以也没有重装



第九步:又有网友说,不用 MSSQLSERVER 使用 SQLEXPRESS,问题解决了,然而查看了一下配置管理器,根本就没有装 SQLEXPRESS 这个东西,作罢






截止到这里,网上能找到的错误原因和解决方法都已经浏览了一遍,整个人都要不好了,因为问题解决不了,接下来就没办法进行了。



就在这时,不得不重新考虑,为什么是今天才出现的问题,今天做的事和往常到底有什么不同,想来想去,有两个不同:



1. SQLServer 是重新安装的,之前用户 sa 用的密码是 sa,重新安装时候要设置 sa 密码时候不支持过短的 sa,于是改成了 123456



2. 今天使用的工程是从旧有的工程复制过来的,原来的工程 properties 文件 sa 密码依然是 sa



第十步:考虑是不是 properties 文件读取时候出现了混乱,读了原来工程中的 properties 文件,而不是新工程的



于是修改原工程 properties 中 sa=123456,无果



第十一步:考虑依然是读 properties 文件出了问题



于是舍弃读 properties 文件这一步,直接把 user 和 password 值写死到 DriverManager.getConnection(url, "sa", "123456")。竟然成功登进去了,也是心累



第十二步:现在看来,绝对是读 properties 文件出了问题



于是测试从 properties 文件中读到的到底是什么值

String user = properties.getProperty("user");
 
 
String password = properties.getProperty("password");
 
 
System.out.println("user:" + user);
 
 
System.out.println("password:" + password);



结果显示,user=sa;password=sa。而此时,两个工程中我都已经把 password 改成 123456 了,那这个 password=sa 到底是从哪儿读到的呢?



于是重新再修改两个工程中的 password 为随便的值,执行结果依然还是 password=sa。无语了,好像工程文件 properties 中无论怎么修改,都不影响  properties.getProperty("password"); 的值。这时候只能认为:在 eclipse 中进行的 properties 文件内容修改无效。就是不影响文件本身的内容。



第十三步:考虑是在 eclipse 中修改 properties 文件内容后,可能需要刷新才能够同时修改文件本身的内容



刷新了,没用



第十四步:这时候,就只剩下了修改文件本身了



于是在 F 盘中找到工程所在目录,找到 properties 文件,用记事本打开,修改 password=123456,刷新工程,重启 Tomcat,成功……






学习到:1.Properties 在 load() 文件后,修改属性值,需要再 store() 才能够把修改后的值写入到硬盘文件中;2.在 eclipse 中修改 properties 文件对硬盘中的文件本身是没有影响的(即使已经刷新过了);3.在编程中,一个小知识点不清楚就要花很多的时间走很多的弯路……






大半天都在折腾这一件事,觉着相当浪费时间,但是既然问题解决了,还是应该分享出来,让一不小心和自己出现同样问题的同学能够节省一些时间,毕竟自己也是看了许多网友的分享,学习到了很多新的东西