【问题标题】:Cannot create JDBC driver of class '' for connect URL 'null' : Tomcat & SQL Server JDBC driver无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序:Tomcat 和 SQL Server JDBC 驱动程序
【发布时间】:2012-03-09 02:10:15
【问题描述】:

我已经尝试了我能找到的所有东西,如果有人能够帮助我,我将永远感激不尽(并且在我的时间里有更多的空闲时间)。

基本上,我在 Tomcat 7.0 中出现错误(无论是在 Eclipse 中运行还是通过 startup.bat 运行时),一旦我的动态 Web 应用程序开始访问数据,就会出现这种情况:

Cannot create JDBC driver of class '' for connect URL 'null'
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)

我的 tomcat\lib 目录中有 sqljdbc4.jar 文件。我也尝试将它放在我的 WEB-INF/lib 甚至我的 JDK lib 目录中。我不认为 sqljdbc.jar 会起作用,因为它适用于比我的旧的 JDK/JRE 安装。

我听说 context.xml 和 web.xml 文件对于让它发挥作用至关重要。

web.xml sn-p:

<resource-ref>
<description>LBI DB Connection</description>
<res-ref-name>jdbc/LBIDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<description>OR DB Connection</description>
<res-ref-name>jdbc/ORDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

context.xml

<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/LBIDB" auth="Container"
type="javax.sql.DataSource" username="***" password="***"   driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=YYBackOffice;SelectMethod=cursor;"
maxActive="8" maxIdle="4"/>

<Resource name="jdbc/ORDB" auth="Container"
type="javax.sql.DataSource" username="***" password="***"   driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=XXBackOffice;SelectMethod=cursor;"
maxActive="8" maxIdle="4"/>

最终,上下文选项卡确实有一个关闭选项卡。

请帮忙!如果您需要更多信息,请告诉我。另外,我不确定应该修改哪个 context.xml,Tomcat 目录中有 2 个,/conf 文件夹中有一个,webapps/appname/META-INF 文件夹中有一个。对不起,如果听起来我有点像菜鸟,那是因为我是!

此外,我还看到了许多不同的 context.xml 部分的 url="..." 示例,其中一些包括端口号。我已经在网上尝试了几件事,但似乎没有任何效果(在网​​上没有任何帮助是我的确切数据环境,而且我认为这个应用程序在给定时间查询两个不同的数据库很有挑战性)。

想法?

【问题讨论】:

    标签: java sql tomcat jdbc database-connection


    【解决方案1】:
    1. Web 应用程序的 META-INF 文件夹中的 context.xml 将优先于 /conf 目录中的那个,这实际上只是一个通用默认值。

    2. 开源的JTDS SQL Server 驱动比微软的要好得多。除非有压倒一切的原因,否则请改用它。将它放在您的 tomcat/lib 文件夹中的唯一原因是,如果您在 server.xml 中为数据库声明 GlobalNamingResource,否则您可以将其放在应用程序的 /lib 文件夹中。

      李>
    3. JTDS 的 JDBC URL 是:jdbc:jtds:sqlserver://hostname/databasename

    4. JTDS的连接驱动类为:net.sourceforge.jtds.jdbc.Driver

    【讨论】:

    • 非常感谢您的澄清,我在网上听到了很多关于 server.xml 以及使用全局资源、context.xml 问题等的内容,这可能会让新手感到困惑。我敢打赌这将帮助我解决我的问题。
    • 仅供参考,更改为 JTDS SQL Server 驱动程序,并使用 JDBC URL/驱动程序类似乎已经奏效。我不能确定,但​​似乎错误已经消失了!事实证明,这个网络应用程序还有一些与我认为无关的其他问题,但这仍然对我自己的目的有很大帮助。非常感谢。
    【解决方案2】:

    在 tomcat 6.0.36 中正好相反:

    CATALINA_HOME/conf/Catalina/your_host/context.xml

    将优先于来自

    的那个

    YourApplication/WebContent/META-INF/

    将sn-p之后的数据放入Catalina/your_host的上下文标签中后,它在我的情况下起作用了:

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
      <Resource name="jdbc/your_db" auth="Container" type="javax.sql.DataSource"
          maxActive="50" maxIdle="30" maxWait="10000"
          username="your_usr" password="your_pwd" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://your_host:3306/your_db"/>
    

    请参阅http://tomcat.apache.org/tomcat-6.0-doc/config/context.html 上的 Tomcat 文档

    【讨论】:

    • 这对我有用。我的设置是带有 Tomcat 插件的 Eclipse,用于调试。对于初始设置,Eclipse 在CATALINA_HOME/conf/Catalina/MY_MAGIC_APP/context.xml 中放置了一个基本的“context.xml”文件。也许我做错了什么,但 Eclipse-Tomcat-plugin 没有拾取或发现我的项目真正的 META-INF/context.xml 文件,其中包含必要的配置信息。我用真正的context.xml 文件替换了基本的context.xml 文件,一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2018-01-14
    • 2011-05-14
    • 2014-01-25
    • 2011-07-06
    • 2015-04-15
    • 2015-12-18
    相关资源
    最近更新 更多