【问题标题】:Tomcat not loading libsTomcat不加载库
【发布时间】:2013-03-19 16:53:54
【问题描述】:

我的 Tomcat(通过 Eclipse 运行)似乎无法加载 SQL Server 驱动程序库:

 java.lang.NullPointerException
java.lang.RuntimeException
    at org.ktu.gdia.core.MainController.processFile(MainController.java:132)
    at org.ktu.gdia.core.MainController.run(MainController.java:57)
java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75)
    at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
    at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1185)
    at org.apache.tomcat.dbcp.dbcp.PoolingDriver.connect(PoolingDriver.java:180)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.ktu.gdia.database.DbActions.openConn(DbActions.java:64)
    at org.ktu.gdia.core.MainController.processFile(MainController.java:134)
    at org.ktu.gdia.core.MainController.run(MainController.java:57)
Exception in thread "Thread-2" java.lang.NullPointerException
    at org.ktu.gdia.database.GenForestDatabase.personExists(GenForestDatabase.java:178)
    at org.ktu.gdia.core.MainController.processFile(MainController.java:158)
    at org.ktu.gdia.core.MainController.run(MainController.java:57)

sqljdbc.jar 和 sqljdb4.jar 和 jtds-1.3.0.jar 位于 Tomcat/lib 目录中。我正在使用 Tomcat 7。Eclipse 是否有可能使 Tomcat 使用不同的 lib 目录,而不是它应该使用的 Tomcat 7 中的 lib 目录?

【问题讨论】:

  • 尝试从命令行运行tomcat,如果你的库已经加载,那么eclipse很可能正在运行不同的tomcat(或者可能在不同的位置运行)。
  • Eclipse 很可能使用了不同的 Tomcat“基础”(CATALINA_BASE)

标签: java sql-server eclipse tomcat


【解决方案1】:

您不需要所有这些 JAR,只需要您真正想要加载的 JAR。它在 Microsoft 驱动程序中显示,而不是 jTDS。

我不知道 Eclipse 在做什么,但 Tomcat 期望 JDBC 驱动程序 JAR 从其 /lib 目录加载。

我不同意这个问题是无法加载驱动程序。 “没有合适的驱动程序”通常意味着连接字符串中的 URL 语法不正确。

你有

jdbc:microsoft:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2

This URL 建议采用以下格式:

jdbc:sqlserver://host:1433;databaseName=dbNameHere;integratedSecurity=true;

如果 URL 看起来正确,我会开始检查其他内容:

  1. 能否从运行 Java 应用程序的服务器 ping 服务器 isd.ktu.lt?如果您看不到该服务器,Java 也不会。
  2. 您能否使用 Microsoft SQL Server Studio 成功连接到该服务器?如果不能,Java 也不会。
  3. 您确定将 SQL Server 侦听器配置为默认侦听端口 1433 吗?出于安全原因,许多 DBA 会选择默认设置以外的其他设置。
  4. 看起来您正在使用数据库连接池,您应该这样做。检查您的JNDI configuration 是否正确。

以下是成功连接到 SQL Server 的应用的配置:

    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="url" value="jdbc:sqlserver://host:port;databaseName=db"/>

【讨论】:

  • 好吧,我想我以前尝试过,但我又试了一次,只留下了 sqljdbc4.jar 并更改了 url,我想我得到了同样的错误,只是因为不同的 url:java。 sql.SQLException:找不到适合 jdbc 的驱动程序:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2;integratedSecurity=true;我没有注意到任何其他区别?
  • “databaseName”而不是“DatabaseName”。也许案件很重要。
  • 嗯,好像是一样的:java.sql.SQLException: No suitable driver found for jdbc:sqlserver://isd.ktu.lt:1433;databaseName=LN2012_bakDB2;integratedSecurity=true;在 java.sql.DriverManager.getConnection(Unknown Source)
  • 尝试去掉 IntegratedSecurity 标志并传入用户名和密码进行身份验证。
【解决方案2】:

您的网址必须是jdbc:sqlserver://server:port;DatabaseName=yourDbName 和类名必须像com.microsoft.sqlserver.jdbc.SQLServerDriver。您可以从here下载和使用MicrosoftSQL Server JDBC Driver 2.0

【讨论】:

  • 嗯,我更改了 URL,但我似乎得到了同样的错误:java.sql.SQLException: No suitable driver found for jdbc:sqlserver://isd.ktu.lt:1433;数据库名称=LN2012_bakDB2;集成安全=真;在 java.sql.DriverManager.getConnection(Unknown Source) Class name must be like com.microsoft.sqlserver.jdbc.SQLServerDriver 到底是什么意思?我正在使用数据库连接池。
  • Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  • 当您使用数据库连接池时,您的 context.xml 应该有一个类似 driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 的条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2020-01-09
相关资源
最近更新 更多