首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于WEB项目中访问连接池的有关问题

2012-04-01 
关于WEB项目中访问连接池的问题最近学习做了一个简单的WEB项目,遇到一个难题,在管理页面中创建了一个连接

关于WEB项目中访问连接池的问题
最近学习做了一个简单的WEB项目,遇到一个难题,在管理页面中创建了一个连接池,从数据库里看连接也是成功的,但是在其它类中获取连接总是提示异常,哪位高手给帮忙看一下
这是连接池

public final class ConnectionPoolInit {
  private static BasicDataSource basicDataSource = null;

  private ConnectionPoolInit(){}

  public static void createDataSource() throws Exception{
  Properties properties = new Properties();
  InputStream inputStream = ConnectionPoolInit.class.
  getClassLoader().getResourceAsStream("dbcpconfig.properties");
  properties.load(inputStream);
  basicDataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(properties);
  }

  public static Connection getConnection() throws Exception{
  return basicDataSource.getConnection();
  }

这是获得连接

  public UserBean loginControl(String uid,String pwd) throws Exception{
  UserBean userBean = new UserBean();
  connection = ConnectionPoolInit.getConnection();

这是返回异常

严重: Servlet.service() for servlet [LoginServlet] in context with path [/chart] threw exception [org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to org.apache.tomcat.dbcp.dbcp.BasicDataSource] with root cause
javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to org.apache.tomcat.dbcp.dbcp.BasicDataSource


[解决办法]
public final class ConnectionPoolInit {
private static BasicDataSource basicDataSource = null;
static{
if(basicDataSource == null)
{
Properties properties = new Properties();
InputStream inputStream = ConnectionPoolInit.class.
getClassLoader().getResourceAsStream("dbcpconfig.properties");
properties.load(inputStream);
basicDataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(properties);
}
}

public static synchronized Connection getConnection() throws Exception{
return basicDataSource.getConnection();
}
}
帮你改造了下,调用:ConnectionPoolInit.getConnection();注意红色的同步关键字必须加上。

[解决办法]
和一楼的差不多,也帮楼主该了一下代码:

public final class ConnectionPoolInit {
private static BasicDataSource basicDataSource = null;
static{
Properties properties = new Properties();
InputStream inputStream = ConnectionPoolInit.class.
getClassLoader().getResourceAsStream("dbcpconfig.properties");
properties.load(inputStream);
basicDataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(properties);
}
  
  
private ConnectionPoolInit(){}

public static void createDataSource() throws Exception{
return basicDataSource
}

public static Connection getConnection() throws Exception{
return basicDataSource.getConnection();
}


用楼主的方法时过前台管理页面访问servlet来初始化连接的是可以的,是因为创建的数据库连接池,如果启动服务后,从来没有访问那个servlet页面,访问其他的方法中只包含:ConnectionPoolInit.getConnection();是肯定会报错的,因为还没有初始化连接池。

分析的不一定对,楼主可以试试

热点排行