利用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;@Servicepublic 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; @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; }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数260
191.63 KB下载数245
143.91 KB下载数1139
183.71 KB下载数640
644.84 KB下载数2752
相关文章
发现更多好内容猜你喜欢
AI推送时光机利用Java如何实现动态加载数据库驱动
后端开发2023-05-31
Ajax如何实现动态加载数据
后端开发2023-06-08
java连接数据库加载驱动失败如何解决
后端开发2023-09-22
iscroll如何动态加载数据
后端开发2024-04-02
idea如何添加数据库驱动
后端开发2023-09-01
利用java怎么实现一个动态加载功能
后端开发2023-05-31
C++使用宏实现动态库加载
后端开发2022-12-16
react如何使用mobx6动态加载数据
后端开发2024-04-02
Java Load API函数:如何实现动态加载和卸载资源?
后端开发2023-06-06
RecyclerChart动态属性图标联动数据动态加载怎么实现
后端开发2023-07-05
js实现动态加载数据瀑布流
后端开发2024-04-02
利用Apache+PHP3+MySQL建立数据库驱动的动态网站(转)
后端开发2024-04-02
怎么在Android中利用Listview动态加载数据
后端开发2023-05-30
Vue如何实现数据驱动
后端开发2023-07-04
Android中怎么利用Xfermode实现动态文字加载动画
后端开发2023-05-30
VUE路由动态加载如何实现
后端开发2023-07-04
Android实现ListView数据动态加载的方法
后端开发2022-06-06
Vue如何实现异步动态加载块
后端开发2023-07-04
angular9中如何实现组件动态加载
后端开发2023-06-14
易语言如何实现动态数据加密
后端开发2024-04-02
咦!没有更多了?去看看其它编程学习网 内容吧