日期:2014-05-16  浏览次数:20752 次

MySQL连接池问题
本人使用Tomcat6自带的连接池,配置连接MySQL数据库。连接池配置成功,访问数据库没有问题。

获取链接代码如下:
public static Connection getConnection(){
//如果连接存在,直接返回连接对象
try {
if(conn != null && !conn.isClosed()){
return conn;
}
} catch (SQLException e1) {
e1.printStackTrace();
}

try {
initDataSource();
conn =  ds.getConnection();
} catch (NamingException e) {
System.out.println("NamingException:数据连接池资源名称找不到");
} catch (SQLException e) {
System.out.println("SQLException: 获取连接失败");
e.printStackTrace();
}

return conn;
}


但是,当多个用户访问时,tomcat报错:
    java.sql.SQLException: Already closed.
或者
   java.lang.NullPointerException
或者
   java.sql.SQLException: Operation not allowed after ResultSet closed

是不是本人从数据库连接池中取连接的方式有问题啊?不知道有谁遇到过同样的问题,希望告知如何解决。
1 楼 wolfbrood 2008-07-28  
<div class='quote_title'>jjpro 写道</div>
<div class='quote_div'>本人使用Tomcat6自带的连接池,配置连接MySQL数据库。连接池配置成功,访问数据库没有问题。 <br/><br/>获取链接代码如下: <br/>public static Connection getConnection(){ <br/>//如果连接存在,直接返回连接对象 <br/>try { <br/>if(conn != null &amp;&amp; !conn.isClosed()){ <br/>return conn; <br/>} <br/>} catch (SQLException e1) { <br/>e1.printStackTrace(); <br/>} <br/><br/>try { <br/>initDataSource(); <br/>conn = ds.getConnection(); <br/>} catch (NamingException e) { <br/>System.out.println("NamingException:数据连接池资源名称找不到"); <br/>} catch (SQLException e) { <br/>System.out.println("SQLException: 获取连接失败"); <br/>e.printStackTrace(); <br/>} <br/><br/>return conn; <br/>} <br/><br/><br/>但是,当多个用户访问时,tomcat报错: <br/>java.sql.SQLException: Already closed. <br/>或者 <br/>java.lang.NullPointerException <br/>或者 <br/>java.sql.SQLException: Operation not allowed after ResultSet closed <br/><br/>是不是本人从数据库连接池中取连接的方式有问题啊?不知道有谁遇到过同样的问题,希望告知如何解决。</div>
<p><br/><br/>修改成下面: <br/></p>
<pre name='code' class='java'>static{
  initDataSource();
}
public static Connection getConnection(){??
??try {
?????return ds.getConnection();
??} catch (NamingException e) {????
???System.out.println("NamingException:数据连接池资源名称找不到");??
??} catch (SQLException e) {?
???System.out.println("SQLException: 获取连接失败");
???e.printStackTrace();???
??}
?}
</pre>
<p>?</p>
2 楼 jjpro 2008-07-28  
<div class='quote_title'>wolfbrood 写道</div><div class='quote_div'><div class='quote_title'>jjpro 写道</div>
<div class='quote_div'>本人使用Tomcat6自带的连接池,配置连接MySQL数据库。连接池配置成功,访问数据库没有问题。 <br/><br/>获取链接代码如下: <br/>public static Connection getConnection(){ <br/>//如果连接存在,直接返回连接对象 <br/>try { <br/>if(conn != null &amp;&amp; !conn.isClosed()){ <br/>return conn; <br/>} <br/>} catch (SQLException e1) { <br/>e1.printStackTrace(); <br/>} <br/><br/>try { <br/>initDataSource(); <br/>conn = ds.getConnection(); <br/>} catch (NamingException e) { <br/>System.out.println("NamingException:数据连接池资源名称找不到"); <br/>} catch (SQLException e) { <br/>System.out.println("SQLException: 获取连接失败"); <br/>e.printStackTrace(); <br/>} <br/><br/>return conn; <br/>} <br/><br/><br/>但是,当多个用户访问时,tomcat报错: <br/>java.sql.SQLException