如何在java运行时从jar文件加载不同类型的Driver.class

如何在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

您好,我正在制作一个查询生成器,可以访问不同类型的数据库,如ms aceess、Mysql、Oracle等

我制作了一个JFrame,其中用户选择一个数据库,并给出用户名和密码,应用程序连接到该数据库,但我不知道如何将driver.class文件从加载到jar文件

   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的方式动态扩展你的类路径,但是这种集成会带来复杂的代价。你能给我一些代码的例子让我正确理解吗