问题描述
刚用s2sh整合做项目(只做了登录模块),都配置好了,可以连接数据库,第一次连接数据库获取数据等操作都可以,但是页面刷新几次之后就连接不上了,页面无法跳转,一直显示正在连接。设了断点,发现可以请求到action,但是一用hibernate向数据库取数据时,就断开了,也没有报错(好像是hibernate取数据卡在那边了,没有打印出hibernate的sql)为什么会有这种情况呢?前几次请求hibernate取数据都可以,刷新多次后就不行了,纳闷呀。 我没有用连接池等。spring配置如下:<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property><property name="url"value="jdbc:sqlserver://localhost:1433;databaseName=bearBook"></property><property name="username" value="sa"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="SystemUserDAO" class="com.bear.dao.impl.SystemUserDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="SystemUserService" class="com.bear.service.impl.SystemUserService"><property name="systemUserDAO" ref="SystemUserDAO"></property></bean><bean id="systemUser" class="com.bear.view.SystemUserAction"><property name="systemUserService" ref="SystemUserService"></property></bean>struts配置文件如下:<struts><constant name="struts.devMode" value="true"></constant><package name="houtai" extends="struts-default"><action name="systemUser" class="systemUser" ><result name="index" >/background/index.jsp</result><result name="error">/background/login.jsp?error=1</result></action></package></struts> hibernate配置如下:<hibernate-configuration><session-factory><property name="show_sql">true</property><property name="dialect">org.hibernate.dialect.SQLServerDialect</property><mapping resource="com/bear/dao/pojo/BookInfo.hbm.xml" /><mapping resource="com/bear/dao/pojo/BookType.hbm.xml" /><mapping resource="com/bear/dao/pojo/SystemUser.hbm.xml" /></session-factory></hibernate-configuration>SystemUserAction中的方法:public String check(){systemUser = systemUserService.checkUser(userName, password);if(systemUser==null){return "error";}else{HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("systemUser", systemUser);return "index";}}调用的SystemUserService中的方法:public SystemUser checkUser(String userName, String password) {String hql = "from SystemUser where userName=? and password=?";Object[]values={userName,password};List<SystemUser> list = systemUserDAO.query(hql,values);SystemUser systemUser = null;if(list.size()!=0){systemUser = list.get(0);}return systemUser;}调用的SystemUserDAO中的方法:public List query(String hql,Object...values) {Query query = getSession().createQuery(hql);for(int i=0;i<values.length;i++){//相当于rs.setObjectquery.setParameter(i, values[i]);}return query.list();}为什么头几次登录都可以(hibernate可以打印出sql语句),多请求几次,hibernate那端就卡在那边了,没有打印出sql语句,页面一直是正在连接。。。连接不上~ spring注入都可以 问题补充:nju_abc 写道
解决方案
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=bearBook"> </property> <property name="username" value="sa"></property> </bean> 在这里面将数据库连接数配上,先配个较小的数,看刷几次就卡住了再配个稍微大的数,多刷几次看看是不是还会卡住
解决方案二:
数据库能维持的连接是有上限的,是不是你没有释放数据库连接,导致后来数据库连接达到上限,这时候再请求连接数据库就得不到连接了。
解决方案三:
JAVA 操作数据库目前比较流行的有:JDBC Ibatis HibernateJDBC 写ResultSet映射麻烦,且SQL语句写在了JAVA程序里面,部署给客户后 ,修改起来麻烦,需要重新编译JAVAIbatis比较优秀Hibernate 性能不是很好
解决方案四:
难道是连接池里的连接没释放,都被占用了?