每次我打开一个到 mysql 数据库的连接来执行一些查询时,我必须把这段代码放在前面:
Class.forName("com.mysql.cj.jdbc.Driver");
否则我得到这个错误:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
例子:
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection conn = DriverManager.getConnection(Data.URL.getValue(), Data.USER.getValue(), Data.PASS.getValue())) {
DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
我的 j-connector jar 已经在 web-inf lib forlder 中了。 我真的每次都必须显式加载驱动程序还是有更好的方法来做到这一点?
将 MySQL JDBC 驱动程序 jar 放在 Web 应用程序的 WEB-INF/lib 文件夹中。 然后在应用程序初始化期间向 DriverManager 注册一次驱动程序,例如,在 servlet 上下文侦听器中。
以下是如何注册驱动程序的示例:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CustomServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
try {
//make sure that the class exists (should work like that, not 100% sure)
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new IllegalStateException("Could not load JDBC driver class", e);
}
try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
} catch (SQLException e) {
throw new IllegalStateException("Could not register JDBC driver", e);
}
}
public void contextDestroyed(ServletContextEvent event) {
// cleanup stuff
}
}