我已经尝试过我能找到的所有东西,如果有人能够帮助我,我会永远感激(并且在我的时间里更加自由)。
基本上,我在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是具有挑战性的。)
思想?
答案 0 :(得分:7)
您的网络应用程序context.xml
文件夹中的META-INF
将优先于/ conf目录中的jdbc:jtds:sqlserver://hostname/databasename
,这实际上只是一般默认设置。
开源JTDS SQL Server驱动程序比微软更好。除非有一个最重要的原因,否则请使用它。将它放在tomcat / lib文件夹中的唯一原因是,如果您在server.xml中为数据库声明GlobalNamingResource,否则您可以将它放在应用程序的/ lib文件夹中。
JTDS的JDBC URL为:net.sourceforge.jtds.jdbc.Driver
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文档