日期:2014-05-19  浏览次数:20597 次

数据源与连接池 java.lang.ClassCastException
本帖最后由 gaopei1991 于 2012-12-15 13:46:42 编辑
tomcat 6.0 jdbc 连接 sql2005 配置如下:
context.xml:
<Resource name="jdbc/sql2005"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=test"
username="sa"
password="sasa"
maxActive="100"
maxidle="30"
maxWait="10000"
factory="org.apache.tomcat.dbcp.dbcp.PoolingDataSource"/>
web.xml:
<resource-ref>
<description>sql Connection</description>
<res-ref-name>jdbc/sql2005</res-ref-name>  
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

go.get():
 initCon = new InitialContext();
 Context envCon = (Context) initCon.lookup("java:comp/env");
 DataSource ds = (DataSource) envCon.lookup("jdbc/sql2005");
 if(ds != null) {
 Connection conn = (Connection) ds.getConnection();
 System.out.println("找到数据源" + conn);
 }


结果就报错:
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to Connection
Conn.doGet(Conn.java:36)

------解决方案--------------------
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to Connection
你这个DataSource 应该是用错包了, Connection conn = (Connection) ds.getConnection();
不能把这个转换为Connection类型

------解决方案--------------------
类型转换异常,可以Debug下Connection conn = (Connection) ds.getConnection(),
看看ds是什么,ds.getConnection()又是什么。