关于在Java中链接SQLServer数据库中失败的原因分析
首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴。(加入了各种Java学习群,基本没有热心帮人解决问题的。可以理解-_-!!!)大神级的人物就不必看拙文了,没有什么技术含量。主要是把Java在链接SQLserver数据库中遇到问题的系统解决方法总结梳理下。废话就不说了,言归正传:
笔者在做Java练习时,对关于链接SQLserver数据库的方法,通过贴心的“度娘”查了很多有借鉴意义的博文,受教非浅。于是本着人人为我的精神照搬了其中一个代码较工整清晰的案例(是谁的我忘记了,因为太多了~_~)。之后令人惊悚的事件发生了,在调试中,一连串的红色EXception冲刷着我的屏幕。上帝啊,那个案例明明在结束语处,写着“测试通过”,为毛在我这里就对我如此这般残忍。好奇心使我不干屈服,我怀着懊恼的心情拿起了鼠标,拖动这哪一行行看不懂的红文,直至顶端。啊!在我有限的鸟语库里终于搜索到了熟悉的内容“ClassNotFindException”。当看到熟悉的景物一种兴奋之感悠然而生,但随后边消失了。因为一个跟现实的问题突然闪现在我的脑海中:“哪代表的是啥意思?”。无奈之下,又在此求助了百求不厌的“度娘”。原来是没有驱动啊!(怎么还要另装驱动啊,不是自带的啊O_O~,看来离我想想的便捷还有段距离。)知道原因就简单了,让“度娘”帮找驱动去,很快就找到了,并下载到的库里。激动的心情难以言表,颤抖的鼠标打开了驱动文件夹,靠!怎么有两个文件,我要用那个。在此蒙圈的我又去问了“度娘”,原来是兼容问题:SQLJDBC.jar是兼容Java1.6之前的;SQLJDBC4.jar是兼容Java1.6之后的;问题高清了,我果断的查了下我的版本:1.8,嗯,看来是SQLJDBC4.jar了。要给它安个家啊,要不怎么能安心工作呢!标准地址是:/java/jdk/jre/lib/ext下。还要把地址告诉我的开发工具,好指导上哪儿去找去,classpath。一切都搞定了这下你该可以了吧。在此运行起我的测试程序。俗话说:“残酷的打击不会只有一个”,又是一堆看不的红文,这是又怎么了,不是已经给你驱动了吗?还真是难伺候啊。耐着性子继续和“度娘”做着和之前一样的工作。在“度娘”帮助下问题是搞清楚了,用户名登录失败!!!!。天啊,什么情况!我明明可以通过配置工具登录的用户名,怎么到你着就不灵了啊,成黑户了吗?没关系,”度娘“是万能的,一问便知。原来SQLserver的身份管理上是区分windows身份和SQLserver身份的,通过外部程序访问要通过SQLserver身份验证才行,原来如此。那就给俺一个sqlserver的身份呗。通过登录管理工具,在安全性里选择两者皆可的混合模式(看来window模式是必须的了)。设置好之后,在用户里启用了我要使用的用户名,设置好密码。好了,累死我了。这下终于完成了。俗话说:“再一再二,不能再三”,这下总该让我看到久违的“链接成功”的消息了吧,哈哈~。我迫不及待地在次运行了程序,有时,我总觉得上帝是在故意整我,哪看到想吐的红文,又在此如约而至的来了,而且还和上次的一模一样,我去,我不是已经给你开通了吗,哪怕你有点新信息也好啊。难道我折腾半天白费了吗?
现实是残酷的,一切还要从头开始。本来我已经打算放弃了,在“度娘”一通漫无目的的海搜中看到,还要在SQLserver的配置工具中配置TCP/IP协议的地址和端口号127.0.0.1:1433都配置好了,可问题依然如故,烦躁之感,时不时的偷袭着我。无聊之下看着配置工具里的内容,突然一个问题引起了我的注意,怎么在配置工具里有两个SQLserver的网络配置项,其中一个多了一个32是什么意思,点开之后发现里面的内容和另一个是完全一样的,只是协议名字有了区别,一个是MSSQLSERVER,一个是SQLEXPRESS。协议中的内容是一样的,只是一个是全启动状态,一个是全禁用状态,突然我灵光一闪(^O^)好像这个跟用管理工具登录时选择服务起名称是一样的啊。难道问题出在这里了吗,顿时倦意全无,在管理工具上试着换下服务器名称登录下,果然登录失败。这下我终于明白了问题的根源,果断的关闭另一服务器,把另一服务器中禁用的项全打开。在进行我之前程序的测试。盼望已久的“链接成功”信息终于出现在了我的眼前。