您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
利用Java如何实现动态加载数据库驱动?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
代码实现
在此只例出核心代码,就是动态加载数据库驱动的类,只是此处暂时没有考虑到数据库连接池的问题,当选择动态加载数据库驱动时,数据库连接池需要自己实现
DynamicLoaderService
package com.tongtongxue.dynamic.service.impl; import java.net.URL; import java.net.URLClassLoader; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.annotation.PostConstruct; import org.springframework.stereotype.Service; import com.tongtongxue.dynamic.model.DataSourceInfo; import com.tongtongxue.dynamic.service.IDynamicLoaderService; /** * 动态加载JDBC数据库驱动服务类 * * @author lzj * */ @Service public class DynamicLoaderService implements IDynamicLoaderService { // 保存数据库连接信息 private Map>String, DataSourceInfo< dataSourceInfos = null; // 保存数据库相应驱动JAR的路径 private Map>String, String< paths = null; // 缓存对应的Driver对象 private Map>String, Driver< drivers = null; private URLClassLoader classLoader; /** * 初始化方法 * * @throws Exception */ @PostConstruct public void init() throws Exception { dataSourceInfos = new HashMap>String, DataSourceInfo<(); // 此处只已oracle9和oracle12为例,其它数据库信息同理的方式增加即可 DataSourceInfo oracle9Info = new DataSourceInfo(); oracle9Info.setDriver("oracle.jdbc.driver.OracleDriver"); oracle9Info.setUrl("jdbc:oracle:thin:@192.168.0.101:1521:ORACLE"); oracle9Info.setUsername("system"); oracle9Info.setPassword("system"); dataSourceInfos.put("oracle9", oracle9Info); DataSourceInfo oracle12Info = new DataSourceInfo(); oracle12Info.setDriver("oracle.jdbc.driver.OracleDriver"); oracle12Info.setUrl("jdbc:oracle:thin:@192.168.0.102:1521:orcl"); oracle12Info.setUsername("system"); oracle12Info.setPassword("system"); dataSourceInfos.put("oracle12", oracle12Info); // 将数据库对应驱动jar放置容器中 paths = new HashMap>String, String<(); paths.put("oracle9", "/driver/ojdbc14.jar"); paths.put("oracle12", "/driver/ojdbc7.jar"); // 初始化drivers drivers = new HashMap>String, Driver<(); } @Override public Connection getConnection(String dbType) throws Exception { Connection conn = null; Driver driver = drivers.get(dbType); DataSourceInfo dataSourceInfo = dataSourceInfos.get(dbType); if (driver == null) { URL jarUrl = this.getClass().getResource(paths.get(dbType)); classLoader = new URLClassLoader(new URL[]{jarUrl}); Class>?< driverClass = classLoader.loadClass(dataSourceInfo.getDriver()); driver = (Driver) driverClass.newInstance(); drivers.put(dbType, driver); } // 注册驱动 DriverManager.registerDriver(driver); Properties properties = new Properties(); properties.put("user", dataSourceInfo.getUsername()); properties.put("password", dataSourceInfo.getPassword()); conn = DriverManager.getConnection(dataSourceInfo.getUrl(), properties); // 卸载驱动 DriverManager.deregisterDriver(driver); return conn; } }
看完上述内容,你们掌握利用Java如何实现动态加载数据库驱动的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。