你是什么库啊?JDBC配置的如何?
Java连接各种数据库的实例  
此文中的代码主要列出连接数据库的关键代码,其他访问数据库代码省略1、Oracle8/8i/9i数据库(thin模式) 
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
String url="jdbc:oracle:thin:@localhost:1521:orcl"; 
//orcl为数据库的SID 
String user="test"; 
String password="test"; 
Connection conn= DriverManager.getConnection(url,user,password); 2、DB2数据库 
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); 
String url="jdbc:db2://localhost:5000/sample"; 
//sample为你的数据库名 
String user="admin"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password); 3、Sql Server7.0/2000数据库 
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; 
//mydb为数据库 
String user="sa"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password); 4、Sybase数据库 
Class.forName("com.sybase.jdbc.SybDriver").newInstance(); 
String url =" jdbc:sybase:Tds:localhost:5007/myDB"; 
//myDB为你的数据库名 
Properties sysProps = System.getProperties(); 
SysProps.put("user","userid"); 
SysProps.put("password","user_password"); 
Connection conn= DriverManager.getConnection(url, SysProps); 5、Informix数据库 
Class.forName("com.informix.jdbc.IfxDriver").newInstance(); 
String url = 
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; 
user=testuser;password=testpassword"; 
//myDB为数据库名 
Connection conn= DriverManager.getConnection(url); 6、MySQL数据库 
Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=
true&characterEncoding=8859_1" 
//myDB为数据库名 
Connection conn= DriverManager.getConnection(url); 7、PostgreSQL数据库 
Class.forName("org.postgresql.Driver").newInstance(); 
String url ="jdbc:postgresql://localhost/myDB" 
//myDB为数据库名 
String user="myuser"; 
String password="mypassword"; 
Connection conn= DriverManager.getConnection(url,user,password); 8、odbc桥接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //装载JDBC-ODBC驱动程序 
strCon = "jdbc:odbc:Test_DB"; //设置数据库连接字符串 ,test_DB
 
 

解决方案 »

  1.   

    不用急,慢慢想肯定是你的配置文件的问题
    要一步一步来测试,tomcat这个东东的配置别人是说不准的。可能你的环境变量设置有误。
      

  2.   

    楼上兄弟,我的是sql server 2000数据库,你的连接并不是连接池的。
      

  3.   

    我也遇到了下楼上的同样的问题我的数据源是sql2000,按照论坛上的方法及要求做的时候总是提示驱动程序未找到及类为'',网上较多谈及的是Tomcat与mysql的配置而与SQL2000的配置也有就是如前文所说的方式,可是错误亦就。
      

  4.   

    在server.xml 你设置的<Context></Context>之间加<ResourceLink global="jdbc/test" name="jdbc/test"/>就可以了。
      

  5.   

    to zmybest(杨过):还是不行啊
      

  6.   

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

  7.   

    to  tangbow(孤独网客) :在web.xml中我已经设了。不是跟你的一样吗?
      

  8.   

    提示很清楚啊,你的数据库url配置有问题
      

  9.   

    问题就是我的URL没有问题啊
    下面是我的server.xml
    <?xml version='1.0' encoding='utf-8'?>
    <Server>
      <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
      <GlobalNamingResources>
        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
        <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
        <Resource auth="Container" description="test database" name="jdbc/test" type="javax.sql.DataSource"/>
        <ResourceParams name="UserDatabase">
          <parameter>
            <name>factory</name>
            <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          </parameter>
          <parameter>
            <name>pathname</name>
            <value>conf/tomcat-users.xml</value>
          </parameter>
        </ResourceParams>
        
        <ResourceParams name="jdbc/test">
          <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
          </parameter>    
          <parameter>
            <name>maxWait</name>
            <value>5000</value>
          </parameter>
          <parameter>
            <name>maxActive</name>
            <value>4</value>
          </parameter>
          <parameter>
            <name>password</name>
            <value>test</value>
          </parameter>
          <parameter>
            <name>url</name>
            <value>jdbc:microsoft:sqlserver://localhost:1433;databasename=testdb</value>
          </parameter>
          <parameter>
            <name>driverClassName</name>
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
          </parameter>
          <parameter>
            <name>maxIdle</name>
            <value>2</value>
          </parameter>
          <parameter>
            <name>username</name>
            <value>test</value>
          </parameter>
        </ResourceParams>  </GlobalNamingResources>
      <Service name="Catalina">
        <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443">
        </Connector>
        <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
        </Connector>
        <Engine defaultHost="localhost" name="Catalina">
          <Host appBase="webapps" name="localhost">
            <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
          </Host>
          <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
        </Engine>
      </Service>
    </Server>
    我的web.xml增加配置如下:
        <resource-ref>
          <description>testDB</description>
          <res-ref-name>jdbc/test</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
        </resource-ref>
      

  10.   

    如果你的网页文件放在“%tomcat_home%\webapps\myweb\”下,就在“%tomcat_home%\conf\Catalina\localhost\”目录下建一个myweb.xml文件,然后把servlet.xml的 <ResourceParams name="jdbc/test">...</ResourceParams>中的内容移到myweb.xml中,试试看。
      

  11.   

    你把驱动拷到WEB_INF/lib目录下试试,我也碰到过这个问题。最好换成5.0.24以上的版本。
      

  12.   

    我也有相同的问题,我现在用的tomcat4是没有问题的,但是移到tomcat5下面就报错,试过多种方法也不行,我也在这借楼主的地方问一下,tomcat4和5之间不兼容吗?他们有什么区别呢,向tomcat4下的web.xml移到5下面,需要改些什么配置,
      

  13.   

    (1)在Server.xml中,找到节点<Host ...></Host>,在<Host ...></Host>,之间添加以下内容:
            <Context path="/tompool" docBase="D:\Proj\test" debug="0">
      <Resource name="jdbc/oracle" auth="Container"
                type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/oracle">
                <parameter>
                  <name>factory</name>
                  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
                </parameter>     
        <parameter>
          <name>driverClassName</name>
          <value>oracle.jdbc.driver.OracleDriver</value>
        </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:oracle:thin:@192.168.0.1:1521:ORCL</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>htwebuser</value>
        </parameter>
        <parameter>
          <name>password</name>
          <value>htwebuser</value>
        </parameter>     
        <parameter>
          <name>maxActive</name>
          <value>30</value>
        </parameter>
        <parameter>
          <name>maxIdle</name>
          <value>10</value>
        </parameter>
        <parameter> 
                  <name>maxWait</name>  
                  <value>-1</value>
                </parameter> 
      </ResourceParams>  
            </Context>
    (2)在Web.xml中,找到节点<web-app ...></web-app>,在<web-app ...></web-app>,之间添加以下内容:
        <resource-ref>
    <description>Oracle Datasource example</description>
    <res-ref-name>jdbc/oracle</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
        </resource-ref>
    (3)把ORACLE的JDBC驱动class12.jar拷贝到<tomcat根目录>\common\lib\目录和<程序根目录>\WEB-INF\lib\目录下(4)测试的Servlet:import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import java.sql.*;
    import javax.sql.*;
    import javax.naming.*;/**
     * <p>Title: Test-Servlet</p>
     * <p>Description:Test-Servlet </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: Qlrr</p>
     * @author:MitnickChen
     * @version 1.0
     */public class SrConnDB extends HttpServlet {
      private static final String CONTENT_TYPE = "text/html; charset=GBK";  private final static String DATASOURCE_NAME = "jdbc/oracle";
      DataSource _pool;  //Initialize global variables
      public void init() throws ServletException{
        try {
          //Context env = (Context) new InitialContext().lookup("java:comp/env");      //_pool = (DataSource) env.lookup(DATASOURCE_NAME);
          Context env = (Context) new InitialContext();
          _pool = (DataSource) env.lookup("java:comp/env/jdbc/oracle");      if (_pool == null)
            throw new ServletException("'" + DATASOURCE_NAME + "' is an unknown DataSource");
        } catch (NamingException e) {
          throw new ServletException(e);
        }
      }  public void doGet(HttpServletRequest req,
                        HttpServletResponse res)
        throws IOException, ServletException
      {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();    Connection conn = null;
        try {
          conn = _pool.getConnection();      Statement stmt = conn.createStatement();      ResultSet rs = stmt.executeQuery("select * from T_ROOT_TEST");      out.println("Brooms:<br>");
          while (rs.next()) {
            out.print(rs.getInt(1));
            out.print(" ");
            out.print(rs.getString(2));
            out.println("<br>");
          }      rs.close();
          stmt.close();
        } catch (SQLException e) {
          throw new ServletException(e);
        } finally {
          try {
            if (conn != null)
               conn.close();
          } catch (SQLException e) {
          }
        }
      }
      //Clean up resources
      public void destroy() {
      }
    }
      

  14.   

    备注:以上的虚拟目录和物理目录,以及ORACLE相关的主机地址,数据库实例名,用户名,密码,测试的表名相应的变动即可.
      

  15.   

    哦,你的数据库用的是SQL-SERVER,那么driverClassName和URL也要做响应的变动.我的Servlet例子在Windows 2000+Oracle9i+Tomcat5.0.19+JDK1.4.1下测试通过!
      

  16.   

    我不用数据库连接池的话是没有问题的,而且我在自己的应用下面也有配置好的web.xml都没有问题。
    想问问有没有遇到过类似问题并且解决的,谈谈经验。
      

  17.   

    对,就按MitnickChen(小骓) 的做!
       你在server.xml和web.xml中都要进行配置
      

  18.   

    楼主,tomcat5.0.19问题多多,当你用get方法传数值时还会出现中文乱码,海的特殊处理,麻烦.我换成tomcat5.0.27后一切都没问题了,不妨你也尝尝鲜~
      

  19.   

    我用的就是tomcat5.0.27和楼主一样的问题,还没有搞定???
      

  20.   

    我按照MitnickChen(小骓)说的步骤做了,仍然产生异常Cannot Create PoolableConnectionFactory,看上去是下面这个类的问题.
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    我可以确信把commons-dbcp.jar放到了该放的目录里.
    请问一下这个错误产生的原因.
      

  21.   

    <ResourceParams name="jdbc/oracle">应该放在<context中>
      

  22.   

    给你偶的server.xml配置
       <Host name="localhost" debug="0" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false" >
    <Context path="" docBase="system" debug="5" 
    reloadable="true" crossContext="true">
     <Logger className="org.apache.catalina.logger.FileLogger"
                     directory="logs"  prefix="localhost_log." suffix=".txt"
                timestamp="true"/>
     <Resource name="MyConnect" 
    auth="Container" 
    type="javax.sql.DataSource"/> 
    <ResourceParams name="MyConnect"> 
        <parameter> 
          <name>factory</name> 
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
        </parameter>     <!-- Maximum number of dB connections in pool. Make sure you 
    configure your mysqld max_connections large enough to handle 
    all of your db connections. Set to 0 for no limit. 
    --> 
        <parameter> 
          <name>maxActive</name> 
          <value>100</value> 
        </parameter> 
    <!-- Maximum number of idle dB connections to retain in pool. 
    Set to 0 for no limit. 
    --> 
        <parameter> 
          <name>maxIdle</name> 
          <value>30</value> 
        </parameter>     <!-- Maximum time to wait for a dB connection to become available 
    in ms, in this example 10 seconds. An Exception is thrown if 
    this timeout is exceeded. Set to -1 to wait indefinitely. 
    --> 
        <parameter> 
          <name>maxWait</name> 
          <value>10000</value> 
        </parameter>
     <!-- MySQL dB username and password for dB connections --> 
        <parameter> 
         <name>username</name> 
         <value>root</value> 
        </parameter> 
        <parameter> 
         <name>password</name> 
         <value></value> 
        </parameter>     <!-- Class name for mm.mysql JDBC driver --> 
        <parameter> 
           <name>driverClassName</name> 
           <value>org.gjt.mm.mysql.Driver</value> 
        </parameter>     <!-- The JDBC connection url for connecting to your MySQL dB. 
    The autoReconnect=true argument to the url makes sure that the 
    mm.mysql JDBC Driver will automatically reconnect if mysqld closed the 
    connection. mysqld by default closes idle connections after 8 hours. 
    --> 
        <parameter> 
          <name>url</name> 
          <value>jdbc:mysql://127.0.0.1:3306/system</value> 
        </parameter> 
      </ResourceParams>
     </Context>
     <!--add end -->
          </Host>测试代码: try{ 
            Context ctx = new InitialContext(); 
            if(ctx == null )  
                throw new Exception("Warning - No Context"); 
                 
            DataSource ds =  
                (DataSource)ctx.lookup("java:comp/env/MyConnect");         if (ds != null) { 
                Connection conn = ds.getConnection();    
                if(conn != null)  { 
                    Statement stmt = conn.createStatement(); 
                    ResultSet rst =  
                    stmt.executeQuery("select * from userinfo"); 
                  
                    while(rst.next()) { 
                       out.println(rst.getString("USERNAME")); 
                        //i++; 
                    } 
                    conn.close(); 
                } 
          } 
        }catch(Exception e) { 
          e.printStackTrace(); 
        }
      

  23.   

    好像tomcat的管理界面有些问题 直接在server.xml里配就行了
      

  24.   

    Cannot create JDBC driver of class '' for connect URL 'null'
    出现这个错误的可能是:
    你的docBase指定的路径和你建立的目录一定要相符,
    而且大小写都要一样,
    比如你的docBase为:D:\DBConn
    那么你就得必须在 D盘根目录建一个DBConn的文件夹
    注意大小写要一致。
      

  25.   

    tiannet(天网)我把docBase设成和建立的目录一致,也是会发生Cannot create JDBC driver of class '' for connect URL 'null'异常的.
      

  26.   

    请问以下帖出程序的朋友,lookup方法中参数前缀java:comp/env代表什么?
      

  27.   

    我也遇到过,不要用tomcat的管理界面,直接到server.xml里配,在<host>下添加,如果再有问题,那可能是你sql2000数据库没装好。
      

  28.   

    <Host name="localhost" debug="0" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="ROOT" debug="0" reloadable="true">
      <Resource name="jdbc/OracleDB" auth="Container"
                type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/OracleDB">
                <parameter>
                  <name>factory</name>
                  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
                </parameter>     
        <parameter>
          <name>driverClassName</name>
          <value>oracle.jdbc.driver.OracleDriver</value>
        </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:oracle:thin:@192.168.0.176:1521:oratvt</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>app</value>
        </parameter>
        <parameter>
          <name>password</name>
          <value>oracle</value>
        </parameter>     
        <parameter>
          <name>maxActive</name>
          <value>200</value>
        </parameter>
        <parameter>
          <name>maxIdle</name>
          <value>20</value>
        </parameter>
        <parameter> 
                  <name>maxWait</name>  
                  <value>15000</value>
                </parameter>
                <parameter>
                  <name>removeAbandoned</name>
                  <value>true</value>
             </parameter>
             <parameter>
                  <name>removeAbandonedTimeout</name>
                  <value>60000</value>
             </parameter> 
      </ResourceParams>  
            </Context>
    上面是我的conf/server.xml里的相关配置,web.xml不需配,把user,pass等改一下
    <%@ page contentType="text/html;charset=GBK"%>
    <%@ page import= "java.sql.* "%>
    <%@ page import= "javax.naming.*,javax.sql.*; "%><%
    ResultSet rs;
    Statement stmt;
    Connection conn;
       try{
       Context initContext = new InitialContext();
       DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/OracleDB");
       conn = ds.getConnection();
       stmt = conn.createStatement();
       
       String strSql=" select * from mp_infor_basic ";
       rs = stmt.executeQuery(strSql);
       if(rs.next()){
          out.println(rs.getString(1));                 
          out.println(rs.getString(2));
         }
       else
       {System.out.println("tables doesnot exit;");}
       }catch(Exception ex){
       ex.printStackTrace();
       throw new SQLException("cannot get Connection pool.");
       }
       if (rs != null) {
           try {
              rs.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
        }    if (stmt!= null) {
           try {
              stmt.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
        }    if (conn!= null) {
           try {
              conn.close();
           } catch (Exception e) {
               e.printStackTrace();
           }
        }
    %>
    把上述jsp文件直接放再webapps/ROOT下,表名等改一下,
    我已经测试成功(sorry,我的是oracle),你看着改一下。
    如果不成功,我也爱莫能助了