如题,报错内容是:
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:1150)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.apache.jsp.Test_jsp._jspService(Test_jsp.java:124)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
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:233)
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:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:253)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
... 20 more
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:1150)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.apache.jsp.Test_jsp._jspService(Test_jsp.java:124)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
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:233)
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:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:253)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
... 20 more
我的操作步骤是:在tomcat安装目录下地conf文件夹下面,更改server.xml,增添如下内容:
<Resource name="jdbc/sqlserver" auth="Container" type="javax.sql.DataSource" diverClassName="com.microsoft.jdbc.sqlserver.SQLServerDrive" url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=MyDatabase"
username="sa" password="123" maxActive="500" maxIdle="10" maxWait="-1" /> 然后在我的web项目下面的web.xml下面增加如下内容:
  <resource-ref>
   <description>db connection</description>
   <res-ref-name>jdbc/sqlserver</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
  </resource-ref> java代码如下:
                Context initCtx = new InitialContext();
     Context ctx     = (Context)initCtx.lookup("java:comp/env");
     Object  obj     = (Object)ctx.lookup("jdbc/sqlserver");
     DataSource ds   = (DataSource)obj;
     Connection conn = ds.getConnection(); 在网上找半天,没有发现解决途径。
谢谢各位了、、、

解决方案 »

  1.   

    估计是你server.xml里的resource段位置错了
    一般来说,不会写在这里面
    如果是全局连接池,写在tomcat/conf/context.xml
    如果是项目连接池 写在项目/META-INF/context.xml
      

  2.   

    tomcat 的加载你的项目,在你项目初始化过程中
    <resource-ref>
      <description>db connection</description>
      <res-ref-name>jdbc/sqlserver</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      </resource-ref> 
    去调用
     <Resource name="jdbc/sqlserver" auth="Container" type="javax.sql.DataSource" diverClassName="com.microsoft.jdbc.sqlserver.SQLServerDrive" url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=MyDatabase"
    username="sa" password="123" maxActive="500" maxIdle="10" maxWait="-1" /> 发现url 为空
      看下你的工程项目少了什么包没,使的项目无法读取Resource 下的url 
      

  3.   

    http://www.blogjava.net/flustar/archive/2007/04/17/111362.html
    看看这个
      

  4.   

    项目下有三个包,分别是 msbase.jar mssqlserver.jar  msutil.jar 作为数据库连接驱动神马的。。别的还需要什么包?
      

  5.   

    我用的是 Tomcat 6.x  ...
    还没解决这个问题。愁死我。 
      

  6.   

    错了...你用的是tomcat连接池,那你的jdbc包和连接池包应该放在tomcat/lib下
      

  7.   

    把  msbase.jar mssqlserver.jar msutil.jar 三个包由你工程的lib下剪切到tomcat/lib下 即可
      

  8.   

    diverClassName="com.microsoft.jdbc.sqlserver.SQLServerDrive"
    写错了,少r
    diverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    另外你可以用新的jdbc包sqljdbc.jar
      

  9.   

    恩 是有的
    tomcat/lib下是有这三个包的。
      

  10.   

    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    好像没有读到 URL哦
      

  11.   

    找到 tomcat 安装文件夹 里面的conf 文件夹
    里面有一个context.xml
    在<context></context>这对标签中粘贴这样一句话
    <Resource name="www" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="sa" password="123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                   url="jdbc:sqlserver://127.0.0.1:1433;databasename=数据库名字"/> <body>
        <%
       
    //这里的“www”是你数据源的名称,自己看看你配置是的数据源名称来填 /*
    配置方法-:
    找到 tomcat 安装文件夹 里面的conf 文件夹/5.5的tomcat在comm 文件夹 里面也有一个lib
    里面有一个context.xml
    在<context></context>这对标签中粘贴这样一句话 <Resource name="www" auth="Container" type="javax.sql.DataSource"
       maxActive="100" maxIdle="30" maxWait="10000"
       username="sa" password="123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
       url="jdbc:sqlserver://127.0.0.1:1433;databasename=数据库名字"/>
    修改 name 定义自己的数据源名称..
    修改 username 与password 改为 数据库 的用户名和密码
    修改 driverClassName 改为 驱动的名称()
    修改 url  改为连接字符串 上面的例子是sqlserver2005的配置
    不管什么数据库,只要把name,username,driverClassName,url配置成你想要的数据库的配置就可以了
    */

    //第二步
        Context initContext = new InitialContext();
    Context envContext  = (Context)initContext.lookup("java:/comp/env");//不要动“java:/comp/env”
    DataSource ds = (DataSource)envContext.lookup("www");
    Connection conn = ds.getConnection();//数据库连接通道,可以conn.Open(),conn.Close()
    //就可以连接数据库了,操作数据跟你平时开发一样,只是这里是tomcat服务器帮你获得了连接conn
         %>
         <%=conn %>
      </body>
    </html>
      

  12.   

    问题终于解决!!
    谢谢各位了我的解决办法是:
    <Resource name="www" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="sa" password="123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://127.0.0.1:1433;databasename=数据库名字"/> 写在%TomCat%conf文件夹下的centext.xml文件下面,而不是server.xml文件夹下面。
    并且我把驱动换成了2005的sqljdbc.jar...还有一点:不用在项目下面的WEB/INF的web.xml写  <resource-ref>
       <description>db connection</description>
       <res-ref-name>jdbc/sqlserver</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
      </resource-ref>
    就是这个可要可不要 终于搞定嗨皮!!!谢谢各位了!!