Jpa 未找到适合jdbc的驱动程序:mysql://localhost:3306/rom (Payara 5,Windows 10)
相信我,我知道这个问题已经被问了很多次,也得到了很多次的答案,这些答案似乎对一些用户有用。我花了很多时间尝试各种建议的解决方案,虽然它们在Linux(Ubuntu)上工作,但似乎对Windows(Windows 10 Home和jdk1.8.0_161)没有任何影响。web应用程序正在使用EclipseLink 2.5.0进行持久化 我尝试将Jpa 未找到适合jdbc的驱动程序:mysql://localhost:3306/rom (Payara 5,Windows 10),jpa,jdbc,glassfish,eclipselink,payara,Jpa,Jdbc,Glassfish,Eclipselink,Payara,相信我,我知道这个问题已经被问了很多次,也得到了很多次的答案,这些答案似乎对一些用户有用。我花了很多时间尝试各种建议的解决方案,虽然它们在Linux(Ubuntu)上工作,但似乎对Windows(Windows 10 Home和jdk1.8.0_161)没有任何影响。web应用程序正在使用EclipseLink 2.5.0进行持久化 我尝试将mysql-connector-java-5.1.46-bin.jar文件包含在WAR归档文件中(WEB-INF/lib;在Eclipse中使用部署程序集屏
mysql-connector-java-5.1.46-bin.jar
文件包含在WAR归档文件中(WEB-INF/lib
;在Eclipse中使用部署程序集屏幕),将其复制到payara5/glassfish/lib
文件夹中,以及payara5/glassfish/domains/domain1/lib/
和payara5/glassfish/domains/domain1/lib/applibs
文件夹。我还尝试在部署web应用程序时指定库,即将mysql-connector-java-5.1.46-bin.jar
作为库字段中的值。我用JAR文件的路径更新了CLASSPATH
环境变量。每次都会重新启动服务器。这些行动都没有任何效果。请注意,他们确实在Linux Ubuntu上工作
有关众所周知的异常跟踪,请参见下文:
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/rom
Error Code: 0
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:331)
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:326)
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:138)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:170)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:228)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:804)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:254)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:757)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:216)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:324)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:348)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:311)
...
任何想法都将不胜感激
更新:作为一种理智的检查(多亏@Abhi,我才有了这个想法),我添加了这一行
try {
System.out.println("JDBC driver: " +
Class.forName("com.mysql.jdbc.Driver"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
正确打印以下行(不引发异常):
但这并不能解决问题。换句话说,驱动程序似乎可以加载,但不知何故,EclipseLink无法找到它(?)看起来我能够回答自己的问题。建议我定义一个数据源,而不是直接使用驱动程序(@Chris也指向这个方向)。数据源可能是最好的选择,但我想避免复杂性,使用最简单的设置。。这显然不起作用 为了便于参考,您可以在下面找到工作设置:
javax.sql.DataSource
作为资源类型,选择MySql作为供应商。在第2步中,应为Datasource Classname预先选择com.mysql.jdbc.jdbc2.optional.MysqlDataSource
。在附加属性标题下填写用户名和密码(例如root、changeit)属性。选择finish。在新创建的连接池页面上,选择PING以确保其设置正确persistence.xml
文件中,确保persistence unit元素按如下方式启动:
java:全局/
web.xml
文件(这也可以使用Java注释完成):
java:全局/
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
[主机名,例如本地主机]
3306
[数据库名称]
[用户名,例如root]
[密码]
这种配置至少对我有效。希望这能帮助其他人。请注意,连接池有各种有用的设置-例如,有关更多选项,请参见。到要连接的代码行:
con = DriverManager.getConnection(urlBaseDatos, usuario, clave);
添加以下内容:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
con = DriverManager.getConnection(urlBaseDatos, usuario, clave);
当然,我同意这里的答案,即“在应用服务器中,您应该使用数据源” 现在就我的两分钱,回答原来的问题: 从JDBC 4中,您不再需要注册驱动程序,并且这一行应该是不必要的:
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
见:
因此,在使用兼容JDK8+/EE8/JDBC4.2的应用程序服务器时,不应强制您注册驱动程序。或者我是这么想的
不过,像你@William一样,我注意到Glassfish/Payara需要它。这很奇怪。也许这与它处理类加载的方式有关
Wildfly反过来做正确的事情,自动加载驱动程序,而无需手动注册。您在连接之前是否注册了驱动程序?使用Class.forName(“Driver.something”);不,因为1)自从JDBC 4以来,这就不需要了;2)我使用的是JPA(EclipseLink),所以我没有手动创建连接,我知道自从JDBC 4以来,它就不需要了。据我所知,Netbeans不注册驱动程序就支持它,但eclipse不支持。但我不能对JPA说什么。别担心有人会帮你的☺️ 或者你可能会比自己聪明。@Abhi它与NetBeans或Eclipse无关。它内置于JRE中。自JDBC1.4以来。@EJP自Java6/JDBC4以来
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());