tomcat连接池报Cannot create JDBC driver of class '' for connect URL 'null'错误。

ruir 2008-07-12 09:46:22
\apache-tomcat-5.5.25\conf\Catalina\localhost\appName.xml中添加:

<Resource
name="jdbc/mysql"
type="javax.sql.DataSource"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="20"
maxWait="10000"
validationQuery="SELECT '1'"
username="root"
url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true"
maxActive="200"/>

web.xml中添加引用连接池代码,则测试连接池文件可以正常连接到连接池。

如果把这段代码删掉,然后在appName\MATA-INF\目录下添加context.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:/Andy/workspace/appName" reloadable="true">
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="20"
maxWait="10000"
validationQuery="SELECT 1"
username="root"
url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true"
maxActive="200"/>
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource" />
</Context>

则报异常如下:
javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null'
java.sql.SQLException: No suitable driver


我在本地测试可以访问tomcat目录下文件,但是程序传到服务器后就不能修改tomcat配置文件,只能在自己发布的应用程序里面配置,
所以我想在自己的应用程序里面配置局部连接池。但是没有成功,希望各位指点。
环境如下:tomcat 5.5 , jdk 1.5, mysql 5.0,
...全文
645 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
逆风向前进 2010-05-20
  • 打赏
  • 举报
回复
我也遇到了同样问题
lixq2000 2008-07-18
  • 打赏
  • 举报
回复
不知道怎么处理,没遇到过类似的问题!
li_x1979 2008-07-18
  • 打赏
  • 举报
回复
引用 9 楼 Landor2004 的回复:
1 是META-INF目录,而不是MATA-INF

2 驱动放在appName的lib目录下

3 还有名字必须是context.xml


这么做没有任何问题

==========================================================================================

驱动要放在appName下的WEB-INF下的lib目录下
Landor2004 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Landor2004 的回复:]
1 是META-INF目录,而不是MATA-INF

2 驱动放在appName的lib目录下

3 还有名字必须是context.xml
[/Quote]

这么做没有任何问题
Landor2004 2008-07-13
  • 打赏
  • 举报
回复
tomcat应该是先读取conf\Catalina\localhost\appName.xml这个文件

如果没有再到appName工程的meta-inf去寻找
ruir 2008-07-13
  • 打赏
  • 举报
回复
配置参数都是从全局连接池中考过来的,应该没有错,
报错信息是找不到驱动,
所以我感觉是tomcat根本没有读取到我的META-INF\context.xml文件,
怎么判断tomcat读取的连接持配置文件是怎么读的?
ruir 2008-07-13
  • 打赏
  • 举报
回复
这个文件覆盖appName.xml ?
我在apache-tomcat-5.5.25\conf\Catalina\localhost\appName.xml中配连接池也是成功了的。
我代码传到服务器后没权限修改tomcat目录下的文件,所以没发配全局连接池,只能在自己的应用程序包里面配,即在META-INF\context.xml里面配。
Landor2004 2008-07-13
  • 打赏
  • 举报
回复
最好删除common下的那个驱动包,用你的appName下的驱动就可以,避免冲突
Landor2004 2008-07-13
  • 打赏
  • 举报
回复
1 到conf\Catalina目录下删除appName.xml
2 把这个覆盖你的xml
<Context path="/appName" docBase="appName"
debug="5" crossContext="true" reloadable="false"
cachingAllowed="true" cacheMaxSize="20480"
cacheTTL="10000">
<Resource name="jdbc/mysql" auth="Container" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true"
type="javax.sql.DataSource" maxActive="50" maxIdle="10"
maxWait="10000" username="root" password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true" />
</Context>


3 删除work下的文件,重新发布

以上配置文件,如果成功的话,参数自己在重新设置设置
老紫竹 2008-07-13
  • 打赏
  • 举报
回复
还有这个 http://www.java2000.net/viewthread.jsp?tid=1906

你参考一下吧!
老紫竹 2008-07-13
  • 打赏
  • 举报
回复
http://www.java2000.net/viewthread.jsp?tid=484
ruir 2008-07-13
  • 打赏
  • 举报
回复
META-INF 程序中没有写错,发贴时的笔误。
驱动在appName\lib\下和tomcat\common\lib\下都有。
context.xml 和Context.xml都试过。

web.xml中添加如下:

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


测试jsp如下:

<%@page language="java" import="java.util.*,java.sql.*,javax.naming.*,javax.sql.*" pageEncoding="GB2312"%>
<%@page import="com.mchange.v2.c3p0.*"%>
<%@page import="java.sql.Connection"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'mysqlTest.jsp' starting page</title>
</head>

<body>
Mysql数据库测试<br><br><br>
<%
Connection conn=null;
try
{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
conn=ds.getConnection();
}
catch(NamingException ex)
{
ex.printStackTrace();
}

String sql="select * from jforum_posts";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
while(rs.next())
{
%>
字段1:<%=rs.getString(1)%> 字段2:<%=rs.getString(2)%><br>
<%
}
if(rs!=null)
{
rs.close();
rs=null;
}
if(ps!=null)
{
ps.close();
ps=null;
}
if(conn!=null)
{
conn.close();
conn=null;
}
%>
</body>
</html>
fashchina 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Landor2004 的回复:]
1 是META-INF目录,而不是MATA-INF

2 驱动放在appName的lib目录下

3 还有名字必须是context.xml
[/Quote]

第一、尝试他的说法

第二、自己用servlet进行数据源创建,如:

import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import org.apache.commons.dbcp.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class JndiDataSourceServlet extends HttpServlet{
private static Log log = LogFactory.getLog(JndiDataSourceServlet.class);
public void init(ServletConfig config) throws ServletException
{
String DBUrl = config.getInitParameter("DBUrl");
if(DBUrl == null) DBUrl = "jdbc:mysql://127.0.0.1:3306/wuzheng";
log.info("DBUrl="+DBUrl);
DBUrl+="?useUnicode=true&characterEncoding=gb2312";
log.info("DBUrl="+DBUrl);
String Username = config.getInitParameter("Username");
if(Username == null) Username = "root";
log.info("Username="+Username);
String Password = config.getInitParameter("Password");
if(Password == null) Password = "";
log.info("Password="+Password);
String DriverClassName = config.getInitParameter("DriverClassName");
if(DriverClassName == null) DriverClassName = "org.gjt.mm.mysql.Driver";
log.info("DriverClassName="+DriverClassName);
String MaxWaitStr = config.getInitParameter("MaxWait");
if(MaxWaitStr == null) MaxWaitStr = "3000";
long MaxWait = (new Long(MaxWaitStr)).longValue();
log.info("MaxWait="+MaxWait);
String MaxIdleStr = config.getInitParameter("MaxIdle");
if(MaxIdleStr == null) MaxIdleStr = "10";
int MaxIdle = (new Integer(MaxIdleStr)).intValue();
log.info("MaxIdle="+MaxIdle);
String MaxActiveStr = config.getInitParameter("MaxActive");
if(MaxActiveStr == null) MaxActiveStr = "100";
int MaxActive = (new Integer(MaxActiveStr)).intValue();
log.info("MaxActive="+MaxActive);
String JndiName = config.getInitParameter("JndiName");
if(JndiName == null) JndiName = "my_datasource";
log.info("JndiName="+JndiName);
try{
Context initCtx = (Context)new InitialContext();
BasicDataSource bds = new BasicDataSource();
bds.setUrl(DBUrl);
bds.setUsername(Username);
bds.setPassword(Password);
bds.setDriverClassName(DriverClassName);
bds.setMaxWait(MaxWait);
bds.setMaxIdle(MaxIdle);
bds.setMaxActive(MaxActive);
initCtx.rebind(JndiName,bds);

}catch(Exception e){
e.printStackTrace();
}

}//end init(ServletConfig config)

}

web.xml
<servlet>
<servlet-name>jndiSource</servlet-name>
<servlet-class>org.fash.wuteng.web.servlet.JndiDataSourceServlet</servlet-class>
<init-param>
<param-name>DBUrl</param-name>
<param-value>jdbc:mysql://127.0.0.1:3306/wuzheng</param-value>
</init-param>
<init-param>
<param-name>Username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>Password</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>DriverClassName</param-name>
<param-value>org.gjt.mm.mysql.Driver</param-value>
</init-param>
<init-param>
<param-name>MaxWait</param-name>
<param-value>3000</param-value>
</init-param>
<init-param>
<param-name>MaxIdle</param-name>
<param-value>10</param-value>
</init-param>
<init-param>
<param-name>MaxActive</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>JndiName</param-name>
<param-value>wuteng</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>


<resource-ref>
<description>DB Connection</description>
<res-ref-name>wuzheng</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

引用:

Context ctx = new InitialContext();
if(ctx == null)throw new Exception("No Context");
javax.sql.DataSource ds = (DataSource)ctx.lookup("wuteng");


这个是很久以前写的


现在基本上都用spring集成的
favorite7w 2008-07-12
  • 打赏
  • 举报
回复
http://yonguo.javaeye.com/blog/114700

lz看下上面的链接,我试着把context.xml文件放在Lz所说的两个地方,确实会出现上述问题。
ruir 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 M_song 的回复:]
别在局部下配哈!

提示错误是找不到合适的驱动。。
不成就换个版本试试!
[/Quote]

程序传到服务器后就不能修改tomcat配置文件,只能在自己发布的应用程序里面配置局部连接池。
我觉得不应该是驱动版本问题,配全局连接池都成功了的。
M_song 2008-07-12
  • 打赏
  • 举报
回复
别在局部下配哈!

提示错误是找不到合适的驱动。。
不成就换个版本试试!
ruir 2008-07-12
  • 打赏
  • 举报
回复
tomcat\comm\lib目录下有mysql驱动的。
而且我在apache-tomcat-5.5.25\conf\Catalina\localhost\appName.xml中配连接池也是成功了的。
只是在appName\MATA-INF\目录下context.xml 中配局部连接池不成功。
laorer 2008-07-12
  • 打赏
  • 举报
回复
java.sql.SQLException: No suitable driver
zhj92lxs 2008-07-12
  • 打赏
  • 举报
回复
没弄过
Landor2004 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 favorite7w 的回复:]
在这里能找到答案的可能性不大,去Tomcat的官方论坛问问吧。
[/Quote]

这个问题很简单,马虎所致
加载更多回复(3)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧