数据库连接池的问题(c3p0),很棘手,项目很紧,高手帮帮忙,严重感谢!!!
1.在server.xml中 <Context> </Context> 内加 <Resource /> ,完整的示例:
<Context path= "/test " docBase= "C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\test " debug= "5 " reloadable= "true " crossContext= "true ">
<Resource auth= "Container " driverClass= "com.mysql.jdbc.Driver "
maxPoolSize= "50 " minPoolSize= "2 " acquireIncrement= "2 "
name= "jdbc/connPool " user= "root " password= "888 "
factory= "org.apache.naming.factory.BeanFactory "
type= "com.mchange.v2.c3p0.ComboPooledDataSource "
jdbcUrl= "jdbc:mysql://localhost:3306/user " />
</Context>
2.在web.xml添加:
<resource-ref>
<description> DB Connection </description>
<res-ref-name> jdbc/connPool </res-ref-name>
<res-type> javax.sql.DataSource </res-type>
<res-auth> Container </res-auth>
</resource-ref>
3.测试页面testConnPool.jsp
<%@ page language= "java " pageEncoding= "UTF-8 "%>
<%@ taglib uri= "http://java.sun.com/jsp/jstl/sql " prefix= "sql " %>
<%@ taglib uri= "http://java.sun.com/jsp/jstl/core " prefix= "c " %>
<sql:query var= "rs " dataSource= "jdbc/connPool ">
select id, typename from text
</sql:query>
<html>
<head>
<title> DB Test Conn Pool c3p0 and Jndi </title>
</head>
<body>
<h2> Results </h2>
<c:forEach var= "row " items= "${rs.rows} ">
id: ${row.id} <br/>
name: ${row.typename} <br/>
</c:forEach>
</body>
</html>
------------------------
这个例子是我从网上考的,改了一下但是并没有成功
那个JSP测试页面最好不用标签,写一个简单的测试类就行,给个列子,各位帮忙啊!!!!!!!!!!!!!!!!!!!
[解决办法]
server.xml中
<Resource auth= "Container " driverClassName= "COM.ibm.db2.jdbc.app.DB2Driver " maxActive= "20 " maxIdle= "10 " maxWait= "10000 " name= "GSETAX " password= "db2inst1 " type= "javax.sql.DataSource " url= "jdbc:db2:DSZGXX " username= "db2inst1 "/>
web.xml中
<resource-ref>
<res-ref-name> GSETAX </res-ref-name>
<res-type> javax.sql.DataSource </res-type>
<res-auth> Container </res-auth>
</resource-ref>
我用的是DB2的数据库,改为你用的驱动,
测试类
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=UTF-8 ">
<title> JSP Page </title>
</head>
<body>
<center>
<h1> XT_CXTJXM表 </h1>
<%
java.sql.Connection conn;
Statement stmt;
conn=DBAccess.getConnection();
stmt=conn.createStatement();
String sql= "SELECT * FROM XT_CXTJXM ";
ResultSet rs=stmt.executeQuery(sql); %>
<table border= "1 " align= "center ">
<tr>
<td width= "200 " align= "center "> BBMC </td>
<td width= "180 "> ENABLE </td>
<td width= "200 " align= "center "> BBMC </td>
<td width= "180 "> ENABLE </td>
</tr>
<%while(rs.next()) {%>
<tr>
<td> <%=rs.getString(1) %> </td>
<td> <%=rs.getString(2) %> </td>
<td> <%=rs.getString(3) %> </td>
<td> <%=rs.getString(4) %> </td>
</tr>
<%}%>
<%
conn.close();
stmt.close();
rs.close();
%>
</table>
</center>
</body>
</html>
//数据库访问类
public class DBAccess {
public DBAccess() {
}
/** Creates a new instance of DBAccess */
public static Connection getConnection() throws NamingException,Exception{
Connection con=null;
try{
DataSource ds=getGSETAX();
con = ds.getConnection();
con.setAutoCommit(false);
return con;
} catch (SQLException sqle){
sqle.printStackTrace();
throw new Exception( "数据库繁忙,请稍候重试 ");
} catch (Exception e){
throw e;
}
}
public static void cleanUP(Connection con,PreparedStatement stmt, ResultSet rs){
try {
try {
if (rs != null) {
rs.close();
}
} finally {
try {
if (stmt != null) {
stmt.close();
}
} finally {
if (con != null) {
con.close();
}
}
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
//得到连接池方法
private static DataSource getGSETAX() throws NamingException {
Context c = new InitialContext();
return (DataSource) c.lookup( "java:comp/env/GSETAX ");
}
}
[解决办法]
JDBC没有注册
[解决办法]
- Servlet.service() for servlet jsp threw exception
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class ' ' for connect URL 'null '
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.apache.jsp.c3p0_jsp._jspService(c3p0_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:243)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 22 more
这又是个什么问题?