利用Java如何实现动态加载数据库驱动

利用Java如何实现动态加载数据库驱动?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

成都创新互联-专业网站定制、快速模板网站建设、高性价比名山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式名山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖名山地区。费用合理售后完善,十多年实体公司更值得信赖。

代码实现

在此只例出核心代码,就是动态加载数据库驱动的类,只是此处暂时没有考虑到数据库连接池的问题,当选择动态加载数据库驱动时,数据库连接池需要自己实现

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如何实现动态加载数据库驱动的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


文章名称:利用Java如何实现动态加载数据库驱动
网页链接:http://pwwzsj.com/article/jsjiic.html