各位大侠帮帮忙,我在做Tomcat6.0下数据库连接池测试,但每次抛出异常:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
我做的流程是:
首先,修改tomcat_Home/conf/context.xml文件,在<Context></Context>之间添加如下 
    <Resource name="jdbc/TestDB" 
              auth="Container" 
              type="javax.sql.DataSource"  
              maxActive="100" 
              maxIdle="30"    
              maxWait="10000"   
              username="sa"       
              password="aaa"  
              driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"   
              url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs" />
2. 在tomcat6\webapps创建测试工程ch3,修改ch3\WEB-INF中web.xml,在<web-app></web-app>中添加如下
<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> 
3. 在WEB-INF中创建lib文件夹,并将sqlserver三个驱动msbase.jar/mssqlserver.jar/msutil.jar拷贝其中。同时将这三个lib文件拷贝至tomcat_Home/lib文件夹下。
4. 编写Servlet测试连接是否成功
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.http.*;public class jdbctest extends HttpServlet
{
/*连接数据库的属性*/
String dbDriver;
String dbURL;
String dbUsername;
String dbPassword;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();

try
{
out.println("初始化中......");
Context initCtx = new InitialContext();
Context envctx = (Context) initCtx.lookup("java:comp/env");
   DataSource ds = (DataSource)envctx.lookup("jdbc/TestDB"); 
   if(ds == null)
out.println("获得DataSource失败!");
else
out.println("获得DataSource成功!");
out.println("<br>");

Connection con = ds.getConnection();
if(con == null)
out.println("连接数据库失败!");
else
out.println("连接数据库成功!");

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from TM3_SERVICES");
out.println("以下是从数据库中获得的数据......");
while(rs.next())
{
out.println(rs.getString(6));
out.println("<br>");
}
}catch(Exception e)
{
e.printStackTrace();
}
}}

解决方案 »

  1.   

    我不用Servlet,用一般java程序测试是成功的
      

  2.   

    web.xml的配置是
    <?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
        version="2.5">    <servlet>
         <servlet-name>testStatus</servlet-name>
         <servlet-class>jdbctest</servlet-class>
       </servlet>
        
        <servlet-mapping>
         <servlet-name>testStatus</servlet-name>
          <url-pattern>/undeploy/he.html</url-pattern>
       </servlet-mapping> <description>SQL2000 Test App</description> 
    <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> 
      
    </web-app>
      

  3.   

    编辑%Tomcat_HOME%conf\context.xml,在<Context></Context>之间添加以下代码 
    <Resource 
          name="..." 
          type="javax.sql.DataSource" 
          password="sa" 
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
          maxIdle="2" 
          maxWait="5000" 
          username="sa" 
          url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=..." 
          maxActive="4"/> 
      

  4.   

    context.xml
    server.xml
    web.xml
    该一致的地方要保持一致
      

  5.   

    %Tomcat_HOME%conf\server.xml中的
    <Resource 
          name="jdbc/..." 
          type="javax.sql.DataSource" 
          password="sa" 
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
          maxIdle="2" 
          maxWait="5000" 
          username="sa" 
          url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=..." 
          maxActive="4"/> 
      

  6.   

    我在server.xml的<host></host>中添加了
    <Resource name="jdbc/TestDB" 
                  auth="Container" 
                  type="javax.sql.DataSource"  
                  maxActive="100" 
                  maxIdle="30"    
                  maxWait="10000"  
                  username="sa"      
                  password="aaa"  
                  driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
                  url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs" /> 
    但还是不行啊,还是抛异常org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver' 
      

  7.   

    异常一直是
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
    at jdbctest.doGet(jdbctest.java:34)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)各位大侠  帮帮忙  小弟我不胜感激!!!!  谢谢
      

  8.   

    你的是 tomcat 6.0 是吧:
    改成这种方式试试 :  
     url="jdbc:microsoft:sqlserver://localhost:1433/pubs;user=sa;password=aaa" /> 
      

  9.   

    http://okone96.itpub.net/post/9033/234537
    看看
      

  10.   

    把连数据库的三个驱动程序拷贝到你的tomcat里面的lib目录里!!!!1
      

  11.   

    SQL Server2000的JDBC驱动程序的DriverClassName是 "com.microsoft.jdbc.sqlserver.SQLServerDriver"SQL Server2005的JDBC驱动程序的DriverClassName是 "com.microsoft.sqlserver.jdbc.SQLServerDriver"你用的是上面的DriverClassName,但却用的是SQL Server 2005 的驱动程序