\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 &apos;1&apos;"
      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, 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【ruir】截止到2008-07-12 09:46:26的历史汇总数据(不包括此帖):
    发帖的总数量:12                       发帖的总分数:1000                     每贴平均分数:83                       
    回帖的总数量:25                       得分贴总数量:4                        回帖的得分率:16%                      
    结贴的总数量:12                       结贴的总分数:1000                     
    无满意结贴数:2                        无满意结贴分:200                      
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:16.67 %               无满意结分率:20.00 %                  
    敬礼!
      

  2.   

    java.sql.SQLException: No suitable driver
      

  3.   

    tomcat\comm\lib目录下有mysql驱动的。
    而且我在apache-tomcat-5.5.25\conf\Catalina\localhost\appName.xml中配连接池也是成功了的。
    只是在appName\MATA-INF\目录下context.xml 中配局部连接池不成功。
      

  4.   


    程序传到服务器后就不能修改tomcat配置文件,只能在自己发布的应用程序里面配置局部连接池。
    我觉得不应该是驱动版本问题,配全局连接池都成功了的。
      

  5.   

    http://yonguo.javaeye.com/blog/114700lz看下上面的链接,我试着把context.xml文件放在Lz所说的两个地方,确实会出现上述问题。
      

  6.   

    在这里能找到答案的可能性不大,去Tomcat的官方论坛问问吧。
      

  7.   

    1 是META-INF目录,而不是MATA-INF2 驱动放在appName的lib目录下3 还有名字必须是context.xml
      

  8.   


    第一、尝试他的说法第二、自己用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集成的
      

  9.   

    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>
      

  10.   

    http://www.java2000.net/viewthread.jsp?tid=484
      

  11.   

    还有这个 http://www.java2000.net/viewthread.jsp?tid=1906你参考一下吧!
      

  12.   

    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下的文件,重新发布以上配置文件,如果成功的话,参数自己在重新设置设置
      

  13.   

    最好删除common下的那个驱动包,用你的appName下的驱动就可以,避免冲突
      

  14.   

    这个文件覆盖appName.xml ?
    我在apache-tomcat-5.5.25\conf\Catalina\localhost\appName.xml中配连接池也是成功了的。
    我代码传到服务器后没权限修改tomcat目录下的文件,所以没发配全局连接池,只能在自己的应用程序包里面配,即在META-INF\context.xml里面配。
      

  15.   

    配置参数都是从全局连接池中考过来的,应该没有错,
    报错信息是找不到驱动,
    所以我感觉是tomcat根本没有读取到我的META-INF\context.xml文件,
    怎么判断tomcat读取的连接持配置文件是怎么读的?
      

  16.   

    tomcat应该是先读取conf\Catalina\localhost\appName.xml这个文件如果没有再到appName工程的meta-inf去寻找
      

  17.   

    引用 9 楼 Landor2004 的回复:
    1 是META-INF目录,而不是MATA-INF 2 驱动放在appName的lib目录下 3 还有名字必须是context.xml 
     这么做没有任何问题==========================================================================================驱动要放在appName下的WEB-INF下的lib目录下