在运行时加载JDBC驱动程序

| 我正在使用以下代码加载驱动程序类:
public class DriverLoader extends URLClassLoader {

    private DriverLoader(URL[] urls) {
        super(urls);
        File driverFolder = new File(\"driver\");
        File[] files = driverFolder.listFiles();
        for (File file : files) {
            try {
                addURL(file.toURI().toURL());
            } catch (MalformedURLException e) {
            }
        }
    }


    private static DriverLoader driverLoader;


    public static void load(String driverClassName) throws ClassNotFoundException {
        try {
            Class.forName(driverClassName);
        } catch (ClassNotFoundException ex) {
            if (driverLoader == null) {
                URL urls[] = {};
                driverLoader = new DriverLoader(urls);
            }
            driverLoader.loadClass(driverClassName);
        }
    }
}
尽管该类可以很好地加载,但是无论我尝试使用哪种驱动程序,我都无法建立数据库连接(找不到适合的驱动程序...)。 我认为这是因为我没有使用Class.forName加载驱动程序类(因为我正在使用自己的ClassLoader,所以无法使用)。我怎样才能解决这个问题?     
已邀请:
您需要先创建驱动程序类的实例,然后才能连接:
Class drvClass = driverLoader.loadClass(driverClassName);
Driver driver = drvClass.newInstance();
拥有实例后,您可以使用该实例进行连接:
Properties props = new Properties();
props.put(\"user\", \"your_db_username\");
props.put(\"password\", \"your_db_password\");
Connection con = driver.connect(\"jdbc:postgresql:...\", props);
或者,如果要继续使用DriverManager,则必须手动在DriverManager中注册驱动程序:
DriverManager.registerDriver(driver);
然后,您应该能够使用DriverManager建立连接。 如果我没记错的话,如果驱动程序本身未由与DriverManager相同的类加载器加载,则DriverManager会拒绝连接。如果仍然如此,则需要直接使用Driver.connect()。     
您应该在DriverLoader加载的类中建立连接。因此,使用DriverLoader加载连接建立代码,然后从中调用JDBC。     
您需要在清单中添加Classpath引用。请遵循以下简单步骤: 将文件夹“ lib”添加到您的应用程序 在库中放置“ mysql-connector-java-5.1.18-bin” 现在打开\“ MANIFEST.MF \”并转到\“ RUNTIME \”标签 在右下角,您会看到\“ classpath \”;点击\“添加\” 现在添加文件夹lib [在步骤1中创建]和jar文件 通过这种方式,每当启动运行时EclipseApplication / OSGi Application时,该jar文件也会随之导出。因此,连接也将在那里可用。     

要回复问题请先登录注册