【问题标题】:java web app run in netbeans - SQLException: No suitable driverjava web应用程序在netbeans中运行-SQLException:没有合适的驱动程序
【发布时间】:2011-04-14 05:08:26
【问题描述】:

我正在尝试运行在另一台机器上开发的应用程序,它可以完美运行,因此它应该与我现在尝试运行它的机器上的配置有关。我正在使用 netbeans 6.9、tomcat 6.0.26 和 maven。

当我尝试运行它时,它给了我以下错误:

Sep 19, 2010 12:51:02 AM org.hibernate.cfg.SettingsFactory buildSettings
WARNING: Could not obtain connection metadata
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'http://maven.apache.org'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2073)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1298)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    at AppConfiguration.loadConfig(AppConfiguration.java:164)
    at Listener.contextInitialized(Listener.java:40)
    at Org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:264)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
    ... 32 more

我应该提一下:

1 我在 Apache Tomcat 6.0.26\lib 中有 mysql-connector-java-5.1.13-bin.jar,在我的 pom.xml 中有:

      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <url>http://maven.apache.org</url>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.13</version>
    <scope>provided</scope>
</dependency>

2 我的本地 maven 存储库中有 jar。

3 Netbeans 现在似乎带有“嵌入式 maven 3.0 版”,这是一个测试版。所以我将它配置为用作外部 Maven 主页:C:\Program Files\apache-maven-2.2.1。运行 mvn --version 会给出正确的版本,因此 maven 2.2.1 似乎已正确安装在我的系统上。但由于某种原因,每当我运行应用程序时,我也会得到这个:

WARNING: You are running embedded Maven builds, some build may fail due to     incompatibilities with latest Maven release. To set Maven instance to use for building, click here.

构建没有失败,但上述警告指向我的链接将我带到我已经配置了“外部 Maven 主页”的同一窗口,如上所述。

4 添加 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); (如在 stackoverflow 上的另一篇文章中所见)在与数据库相关的任何内容都没有帮助之前。

5 相同的代码正在另一台机器上运行。

如果我得到 jdbc 驱动程序错误的原因,我将不胜感激。请记住,该应用程序正在另一台机器上运行。

context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/app/test">
  <Resource auth="Container" defaultAutoCommit="false" description="dbcp" driverClassName="com.mysql.jdbc.Driver" initialSize="1" maxActive="10" maxIdle="5" maxWait="1000" minIdle="10" name="jdbc/Test" password="${database.password}" poolPreparedStatements="true" type="javax.sql.DataSource" url="${database.url}" username="${database.username}"/>
  <Realm className="org.apache.catalina.realm.DataSourceRealm" dataSourceName="jdbc/Test" localDataSource="true" roleNameCol="role" userCredCol="pass" userNameCol="user" userRoleTable="roles" userTable="users"/>
  <Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="combined" prefix="test-access" resolveHosts="false" rotatable="true" suffix=".log"/>
</Context>

database.url 在哪里 jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">java:/comp/env/jdbc/Test</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="cache.use_query_cache">false</property>
        <property name="cache.use_minimal_puts">false</property>
        <property name="max_fetch_depth">3</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="generate_statistics">true</property>
        <property name="hbm2ddl.auto">validate</property>
        <property name="current_session_context_class">thread</property>
        <mapping class="Test.Users"/>
        <mapping class="Test.Roles"/>
        <!-- entity bean defs -->
    </session-factory>
</hibernate-configuration>

【问题讨论】:

    标签: java mysql maven-2 jdbc


    【解决方案1】:

    java.sql.SQLException: No suitable driver 的常见原因是

    • 网址错误
    • 后面的驱动程序未加载。

    确实,以下行清楚地表明了一些错误。

    Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL <b>'http://maven.apache.org'</b>

    JDBC 连接字符串不能是http://maven.apache.org

    检查您的构建,IS 有问题(似乎发生了一些意外过滤)。

    但是你没有提供足够的细节来获得更详细的答案。

    【讨论】:

    • 我在其他帖子中看到了这两种可能的原因,但我不知道如何排除其中任何一种。请告诉我我应该提供哪些更多细节。我唯一拥有该 URL 的地方是我的 pom.xml,这就是我从中发布相关代码行的原因。
    • @mihaela jdbc 连接字符串在哪里声明?你有context.xml 吗?在hibernate.cfg.xml?内容是什么(构建之前/之后)?
    • 我现在已将这些详细信息作为对我原始帖子的编辑提供。
    • @mihaela database.url 是在哪里定义的?您是否检查了context.xml 的“过滤”版本(在构建之后)?看起来它获得了${project.url} 的值。
    • 确实是问题所在。我现在看到,在构建之后,我的 context.xml 没有将 database.password、database.user 和 database.url 替换为在我用于在开发和生产之间切换的 .properties 文件中找到的正确值配置。这些文件似乎没有被解释,并且 project.url 最终被maven.apache.org 替换。非常感谢您的宝贵时间。
    【解决方案2】:

    这看起来像您告诉 Hibernate 使用容器提供的 DataSource,而后者又找不到 JDBC 驱动程序。

    如果是这样,问题是容器类加载器加载的代码看不到 WAR 中提供的代码。

    您必须将驱动程序jar添加到容器的扩展文件夹中。

    【讨论】:

    • 我在 Apache Tomcat 6.0.26\lib 中有 mysql-connector-java-5.1.13-bin.jar,如果这是您所指的。
    • 问题是 DriverManager 无法为提供的 JDBC 字符串找到驱动程序。您应该已经涵盖了第 4 点 - 类是否加载?
    • 问题是 JDBC 字符串 is 错误(目前是http://maven.apache.org)。这不是类加载问题。
    • 看来问题出在 Pascal Thivent 所指出的问题上,但我很感谢您为我提供的帮助。谢谢。
    • @Pascal,啊。认为这条消息是在驱动程序被选择之后发出的,而不是之前。那么 MySQL 驱动程序是如何选择的呢?
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 2012-12-08
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多