2012-04-18 133 views
1

我在使用Hibernate时遇到了可怕的没有合适的驱动程序发现错误。我很确定驱动程序jar是在类路径中,因为我可以做Class.forName("com.mysql.jdbc.Driver")。实际上现在我只是在构建会话工厂和代码之前调用它。但这是'安全'吗?这是为什么发生?下面是我的配置:Hibernate jdbc找不到合适的驱动程序

<session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> 

    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">password</property> 

    <property name="connection.pool_size">1</property> 

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 

    <property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <property name="use_sql_comments">false</property> 

    <mapping resource="User.hbm.xml" /> 
</session-factory> 

谢谢

+1

如果出现这种情况,可能是因为遇到类加载问题。与hibernate相比,jdbc驱动程序jar在哪里? – Jeroen 2012-04-18 14:05:28

+0

我所有的罐子都位于'WEB-INF/lib'中。这很奇怪,就像我说的,我只是调用'Class.forName(“com.mysql.jdbc.Driver”);'在设置会话工厂并且一切正常之前,我可以查询我的数据库并返回数据。我只是想知道我的解决方案是否稳定和安全...... – WakaJawaka 2012-04-18 15:26:51

回答

1

这听起来像JAR是在CLASSPATH。如果不是这种情况,你会得到一个异常。

没有合适的驱动程序通常意味着给定驱动程序的连接URL语法不正确。

MySQL需要"jdbc:mysql://server:3306/database" - 你的看起来是正确的。

如果无法解析localhost,则会出现问题。也许127.0.0.1会更好。

MySQL是否在端口3306上侦听?

请求连接的数据库是否存在?你可以通过MySQL客户端登录并查看表格和数据吗?

+0

驱动程序应该接受任何格式正确的URL(即遵守为特定驱动程序建立的URL语法),即使指定的主机或端口不可用于连接。 DriverManager分两步建立连接:首先遍历所有可用的驱动程序,询问它们是否接受指定的URL,接受它的第一个驱动程序将用于实际建立连接。如果没有驱动程序接受URL,问题的第一部分会出现错误。 – 2012-04-18 14:52:27

+0

每当我收到那个错误,这意味着我对我使用的驱动程序有语法错误。所以我会看到它,如果我给了正确的MySQL URL语法,并使用Oracle JDBC驱动程序JAR或不正确的Oracle URL语法。如果这就是你的意思,那么我们同意。 – duffymo 2012-04-18 15:00:05

+0

这就是我的意思,因为你在谈论解析主机和端口。这只有在驱动程序接受URL后才能发挥作用。 – 2012-04-18 16:55:30

相关问题