Então, eu fiz um programinha na faculdade pra mexer com BD q carregava o jar em tempo de execução.
Tem um porém na hr de carregar o driver q eu não consegui encontrar explicação alguma, mas funcionou… Talvez alguém possa explicar o porque disso.
Aqui carrega o jar e retorna uma instância do Driver
private Driver carregarDriverJar(String caminho, String driverClass) {
try {
URL caminhoDr = new URL("file",null,"/"+caminho);
URL[] urls = {caminhoDr};
URLClassLoader loader = new URLClassLoader(urls);
Driver driver = (Driver)Class.forName(driverClass,true,loader).newInstance();
return driver;
} catch (MalformedURLException ep) {
ep.printStackTrace();
return null;
} catch(ClassNotFoundException ep) {
ep.printStackTrace();
return null;
} catch(IllegalAccessException ep) {
ep.printStackTrace();
return null;
} catch(InstantiationException ep) {
ep.printStackTrace();
return null;
}
}
Aqui usa o driver carregado para conexão
public void conectar(Driver conDriver, String url, String login, String senha) {
try {
DriverManager.registerDriver(new DriverMid(conDriver)); // Atenção para o uso da classe DriverMid
con = DriverManager.getConnection(url,login,senha);
} catch(SQLException ep) {
ep.printStackTrace();
}
}
Agora vem o porém… se vc passar o driver direto pra registrar com o DriverManager não passa… não sei pq. Daí eu achei num paper muito do além q o cara tinha feito essa implementação da classe Driver, e com isso o DriverManager aceita o driver em tempo de execução.
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Properties;
public class DriverMid implements Driver {
private Driver driver;
public DriverMid(Driver d) {
this.driver = d;
}
public boolean acceptsURL(String u) throws SQLException {
return this.driver.acceptsURL(u);
}
public Connection connect(String u, Properties p) throws SQLException {
return this.driver.connect(u, p);
}
public int getMajorVersion() {
return this.driver.getMajorVersion();
}
public int getMinorVersion() {
return this.driver.getMinorVersion();
}
public DriverPropertyInfo[] getPropertyInfo(String u, Properties p) throws SQLException {
return this.driver.getPropertyInfo(u, p);
}
public boolean jdbcCompliant() {
return this.driver.jdbcCompliant();
}
}
Não tem nada de mais a implementação, mas funciona, e isso é o q as vezes é o mais importante 