Q1、今天在做登录验证的测试时,居然总是发生如下异常:
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'userInfo' 无效。
(userInfo是表名)
遇到这个问题,我首先去检查数据库中是否有这个表,userInfo这个表确实存在且没有拼写错误,但是java为什么找不到呢?我又重新写了一个类:
运行后,让我意想不到的是输出结果是1!即成功连接数据库并且查询到数据表中的用户名、密码。为什么这个连接和查询作为一个整体程序时就能成功,而我将他们分离时就出现异常呢?
久思无果,于是上网搜索。网络就是好,这一搜就找到了与我遇到同样问题的前辈们的解决办法,就是修改登录用户的默认数据库为要使用的数据库名称。乖乖照着做了,果然成功了!大喜!但是马上又意识到,如果我没有修改登录用户的默认数据库的权限呢,再者说了,就算我拥有至高无上的权限(比如sa),就这样更改了登录用户的默认数据库,也是对用户的不尊重吧,如果这个登录用户名还有其他的用途呢。所以我决定放弃这种方法,转而采用在给出sql语句时直接指定数据库名称。具体做法如下:
那么上一篇中的专门负责加载驱动和建立连接的类需要改了:
Q2、然而,就在我准备完整的异常也粘贴上时,第一种情况却出现不了异常!一切又正常了。不管我把默认数据库更改为什么名称,所有代码都是正确的。
真是百思不得其解!明明就是会出现异常的,就是让电脑睡眠了两小时而已,一切又正常了!暂且放下疑问,还是采用原来的连接方式吧!