如何在java运行时从jar文件加载不同类型的Driver.class
您好,我正在制作一个查询生成器,可以访问不同类型的数据库,如ms aceess、Mysql、Oracle等 我制作了一个JFrame,其中用户选择一个数据库,并给出用户名和密码,应用程序连接到该数据库,但我不知道如何将driver.class文件从加载到jar文件如何在java运行时从jar文件加载不同类型的Driver.class,java,jakarta-ee,Java,Jakarta Ee,您好,我正在制作一个查询生成器,可以访问不同类型的数据库,如ms aceess、Mysql、Oracle等 我制作了一个JFrame,其中用户选择一个数据库,并给出用户名和密码,应用程序连接到该数据库,但我不知道如何将driver.class文件从加载到jar文件 package design; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import jav
package design;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.*;
public class Connect_to_database {
Panel_Connection pc;
Connection con;
ResultSet result;
Statement stm;
ClassLoader cl;
Class cls;
public Connect_to_database(Panel_Connection pc) {
this.pc=pc;
if(pc.database_name.equals("MySQL")){
loadMySQLDriver();
}
if(pc.database_name.equals("Oracle")){
loadOracleDriver();
}
if(pc.database_name.equals("MS-Access")){
loadMS_AccessDNS();
}
try {
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root","anil");
} catch (SQLException e) {
e.printStackTrace();
}
}
private void loadMS_AccessDNS() {
// TODO Auto-generated method stub
}
private void loadOracleDriver() {
// TODO Auto-generated method stub
}
public void loadMySQLDriver(){
File file = new File("F:\\database server\\mysql\\com.mysql.jdbc.Driver\\com.mysql.jdbc.Driver\\mysql-connector-java-5.1.26-bin.jar");
URL url = null;
try {
url = file.toURI().toURL();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URL[] urls = new URL[] { url };
cl = new URLClassLoader(urls);
try {
cls =cl.loadClass("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这给了我错误
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/student
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at design.Connect_to_database.<init>(Connect_to_database.java:19)
at design.Panel_Connection.actionPerformed(Panel_Connection.java:121)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.sql.SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/student
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
在design.Connect_到_数据库。(Connect_到_数据库。java:19)
在design.Panel\u Connection.actionPerformed(Panel\u Connection.java:121)
在javax.swing.AbstractButton.fireActionPerformed(未知源)
位于javax.swing.AbstractButton$Handler.actionPerformed(未知源)
在javax.swing.DefaultButtonModel.fireActionPerformed(未知源)
位于javax.swing.DefaultButtonModel.setPressed(未知源)
位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码)
位于java.awt.Component.ProcessMouseeEvent(未知源)
位于javax.swing.JComponent.ProcessMouseeEvent(未知源)
位于java.awt.Component.processEvent(未知源)
位于java.awt.Container.processEvent(未知源)
位于java.awt.Component.dispatchEventImpl(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(未知源)
位于java.awt.LightweightDispatcher.dispatchEvent(未知源)
位于java.awt.Container.dispatchEventImpl(未知源)
位于java.awt.Window.dispatchEventImpl(未知源)
位于java.awt.Component.dispatchEvent(未知源)
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$400(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
在java.awt.EventQueue$4.run处(未知源)
在java.awt.EventQueue$4.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
在类路径中加载驱动程序jar。我很确定,如果不编写自定义类加载器,就不能在jar中使用它。但是应用程序连接许多类型的数据库,如ms access、Mysql、Oracle,那么我应该在classpath VARIABLE中设置5个以上的数据库类路径。如果必须连接5个不同的数据库,那么可以。您的类路径中需要所有五个数据库驱动程序。您可以通过创建自定义类加载器来扩展您的类路径,但这不值得-啊,抱歉,这么大声喊叫。你可以按照OSGi的方式动态扩展你的类路径,但是这种集成会带来复杂的代价。你能给我一些代码的例子让我正确理解吗