您的位置:首页 > 编程语言 > Java开发

myeclipse中为struts配置dbcp数据池连接sqlserver时出现的问题

2012-03-17 16:13 369 查看
下午照着书上写了个连接sqlserver的dbcp数据池,出现不少错误。。

一开始用myeclipse中struts-config中的新建datasource的向导,生成之后如下图:

<data-sources>
<data-source key="mydatasource" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="autoCommit" value="false" />
<set-property property="readOnly" value="false" />
<set-property property="description" value="mydatasource" />
<set-property value="loginTimeout" property="20"/>
<set-property property="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<set-property property="minCount" value="5" />
<set-property property="user" value="testrootsql" />
<set-property property="password" value="testrootsql" />
<set-property property="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=user" />
<set-property property="maxCount" value="10" />
</data-source>
</data-sources>
然后部署还有访问的时候直接来个

HTTP Status 404 - Servlet action is not available

不知道为什么会servlet找不到,一开始以为是index.do在struts-config中没有正确的设置跳转,但检查之后确认没有问题。忽然想起来前几天看一篇文章写myeclipse中如果不是用自带的连接池的话那自动生成的配置中间有两个properties名称需要改,driverClass应该改为driverClassName,而user应该改为username。改完之后重新部署,这下可以进入到登陆页面,但是输入用户名密码点登陆之后控制台提示

java.lang.NullPointerException

at com.bupt.struts.action.LoginAction.valid(LoginAction.java:90)

at com.bupt.struts.action.LoginAction.execute(LoginAction.java:65)

然后百度了一下NullPointerException,说是引用空指针可能导致的,65行跟90行代码分别为:

65:boolean isvalid=valid(request,username,password);

try{

ds=getDataSource(request);

90: cn=ds.getConnection();

Statement st=cn.createStatement();

90行是在65行所调用的函数内,因此大体定位于90行附近,90行调用空对象那只可能是DS了,也就意味着上一行的getdatasource函数有问题,没有返回正确的对象。

于是百度ds=getDataSource(request);,还真发现了问题,因为myeclipse自动生成的配置里面有datasource有KEY这个属性,有这个的话在调用这个函数的时候就需要加上,于是把key这个属性值给删除掉。。重新运行,提交用户名跟密码之后发现datasource问题已经解决。出现新的问题

com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'user' 附近有语法错误。

由以上的错误,以后要记得在myeclipse自动生成的东西上要注意,有可能是不合适的。。!!!!!

下面解决关键字的问题,一开始以为是自己的struts-config上的<set-property property="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=user" />

这句中的user有问题呢,但是对着语法查了会也没发现问题,于是百度,发现原来数据库中有一个表命名的是user,而在INSERT跟SELECT语句中有user这个词,但在sqlserver中user是关键字,因此必须在sql语句中把user改成[user],try it!OK,GAME OVER!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: