java动态语言库_利用Java如何实现动态加载数据库驱动

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

发布时间:2020-11-19 16:44:28

来源:亿速云

阅读:101

作者:Leah

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值