tomcat 配置的数据源如下:
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb" />
写的测试类如下:
package com.telenav.Brant;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class ConnectDB {
public ConnectDB(){}
public static void testDB(){
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/TestDB");
Connection con = (Connection) ds.getConnection();
Statement stmt = (Statement) con.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
while(rs.next()){
System.out.println(rs.getString(2));
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解决方法:
Connection con = (Connection) ds.getConnection();
Connection 应该是 java.sql.Connection. 但是用的是: com.mysql.jdbc.Connection
tomcat的数据源的PoolGuardConnectionWrapper 实现的是 java.sql.Connection. 把它转换为 com.mysql.jdbc.Connection肯定出错
Statement 必须用 java.sql.Statement
对于我这种javaEE小白来说很容易犯这种错误,所以这里贴出来,希望以后学习的小伙伴可以避免