无法为连接URL'null'创建类''的JDBC驱动程序:Tomcat& SQL Server JDBC驱动程序

时间:2012-02-17 16:52:56

标签: java sql tomcat jdbc database-connection

我已经尝试过我能找到的所有东西,如果有人能够帮助我,我会永远感激(并且在我的时间里更加自由)。

基本上,我在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片段:

<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 =“...”部分的许多不同示例,其中一些包括端口号。我已经尝试了几个在线的东西,但似乎没有任何工作(在网上没有任何帮助是我确切的数据环境,我认为这个应用程序在给定时间查询两个不同的DB是具有挑战性的。)

思想?

2 个答案:

答案 0 :(得分:7)

  1. 您的网络应用程序context.xml文件夹中的META-INF将优先于/ conf目录中的jdbc:jtds:sqlserver://hostname/databasename,这实际上只是一般默认设置。

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

  3. JTDS的JDBC URL为:net.sourceforge.jtds.jdbc.Driver

  4. JTDS的连接驱动程序类为:{{1}}

答案 1 :(得分:3)

在tomcat 6.0.36中,它正好相反:

CATALINA_HOME/conf/Catalina/your_host/context.xml

将优先于

YourApplication/WebContent/META-INF/

将数据放在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文档