首页 > 数据库 >通过java.sql.DriverManager获取多数据源连接

通过java.sql.DriverManager获取多数据源连接

时间:2023-05-22 15:01:31浏览次数:43  
标签:DriverManager dataBaseInfo java String database 数据源 jdbcDriverEnum JdbcDriverEnu

import lombok.Data;
import lombok.SneakyThrows;
import org.springframework.util.StringUtils;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;

public class JdbcDriverManger {

    @SneakyThrows
    public static Connection connection(JdbcDriverEnum jdbcDriverEnum, String jdbcUrl, String user, String password, String database) {
        if (!StringUtils.hasText(jdbcUrl)) {
            throw new NullPointerException("数据库连接不能为空");
        }
        Class<?> aClass = Class.forName(jdbcDriverEnum.getValue());
        Driver driver = (Driver) aClass.newInstance();
        DriverManager.deregisterDriver(driver);
        if (!StringUtils.hasText(database)) {
            jdbcUrl = jdbcUrl + "/" + database;
        }
        return DriverManager.getConnection(jdbcUrl, user, password);
    }

    public static Connection createConnect(DataBaseInfo dataBaseInfo, String database) {
        String jdbcUrl = "";
        JdbcDriverEnum jdbcDriverEnum = null;
        switch (dataBaseInfo.getSourceType()) {
            case 1:
                jdbcUrl = "jdbc:mysql://";
                jdbcDriverEnum = JdbcDriverEnum.MYSQL5;
                break;
            case 2:
                jdbcUrl = "jdbc:clickhouse://";
                jdbcDriverEnum = JdbcDriverEnum.CLICKHOUSE;
                break;
            case 3:
                jdbcUrl = "jdbc:oracle:thin:@";
                jdbcDriverEnum = JdbcDriverEnum.ORACLE;
                break;
            case 4:
                jdbcUrl = "jdbc:postgresql://";
                jdbcDriverEnum = JdbcDriverEnum.POSTGRESQL;
                break;
        }
        jdbcUrl = jdbcUrl + dataBaseInfo.getIpAddress() +":"+ dataBaseInfo.getPort();
        if (dataBaseInfo.getSourceType() == 1&& StringUtils.hasText(database)){
            jdbcUrl += "?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true";
        }else if (dataBaseInfo.getSourceType() == 1 && !StringUtils.hasText(database)){
            database += "?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true";
        }
        return JdbcDriverManger.connection(jdbcDriverEnum, jdbcUrl, dataBaseInfo.getUser(), dataBaseInfo.getPassword(), database);
    }
}

@Data
class DataBaseInfo {
    private int sourceType;
    private String sourceId;
    private String user;
    private String password;
    private String ipAddress;
    private String port;
}

注意:pom中需要引入对应的连接驱动

标签:DriverManager,dataBaseInfo,java,String,database,数据源,jdbcDriverEnum,JdbcDriverEnu
From: https://www.cnblogs.com/goPush/p/17420642.html

相关文章

  • Java笔记(六):锁
    传统的Synchronized锁Synchronized通过为方法或代码块添加互斥锁,来保证线程安全性。持有相同锁的多个线程,同一时间只有一个线程能够拿到锁并执行锁定的代码块或方法。publicsynchronizedvoidrun(){//dosomething}Lock锁接口Lock的实现类:ReentractLockReentractRe......
  • [Java] JDK与Spring国际化支持
    0序言在Springcontext与SpringIoC对ApplicationContext以及Context相关的设计模式进行了介绍。ApplicationContext作为一个Context在应用的运行层提供了IoC容器、事件、国际化等功能接口。Spring的国际化(i18n)功能是通过MessageSource接口实现的,他提供了MessageSource::getM......
  • 【Java】引用传递?值传递?
    引用传递和值传递,从上学那会儿就开始强调的概念,不管你是计算机相关专业还是自学Java,一定听过这么一句话:方法调用参数如果是对象,那就是引用传递,如果是基本数据类型,就是值传递。比如:function(Objecto)就是引用传递,function(inti)就是值传递。这两个概念似乎很好理解,我们只需要记......
  • 【iOS开发】UIWebView调用JS点击事件(stringByEvaluatingJavaScriptFromString)
    一、场景描述产品需求是移动端app要调用h5页面,然后监听h5代码中的某个方法,最终执行h5中的具体代码。二、具体代码.m文件@interfaceViewController()<UIWebViewDelegate>@property(nonatomic,strong)UIWebView*webView;@end@implementationViewController-(void)viewDid......
  • Java入门9(HashSet,File文件类)
    HashSetjdk1.7之前,使用数组加链表的方式实现jdk1.8之后,在链表长度大于8并且数组长度超过32的情况下,会转成红黑树结构HashSet的本质是一个HashMap,它所有的value都是一致的,传入的参数作为key,因此HashSet中不允许重复数据存储的时候,键值对位于的数组位置,之和key的HashCode值有关......
  • java通用xls导出设计
    背景在后端日常开发中总会有各种各样的导出需求,实现这个需求必须要解决的两个问题:1、表头不能直接使用字段名,需要显示为中文,甚至还需要考虑国际化2、值需要翻译,比如性别、状态之类的字段现状现在主流写的比较好的方法是定义一个对象,对象上用自定义的注解+easytrans我的解决......
  • Java使用HttpClient以multipart/form-data向接口上传文件
    前言对接某公司的接口,涉及到资质上传等业务。需要对接他们的上传附件接口。JDK1.8httpclient4.x封装httpclient方法publicstaticStringpostFileMultiPart(Stringurl,Map<String,ContentBody>reqParam)throwsIOException{ CloseableHttpClienthttpclient=HttpCl......
  • 基于springBoot框架JAVA语言汽车销售管理系统功能实现
    运行环境idea(推荐)、jdk1.8、mysql5.X(不能为8驱动不匹配)、maven项目技术springboot+vue项目描述本项目基于springboot以及Vue开发。针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能,提供经理和销售两种角色进行管理。1.安装好node环境2.......
  • 基于JAVA语言实现的养老信息管理系统
    项目描述本系统的主要功能有:账号管理:管理员账号,用户账号健康管理:健康档案,病例档案,药品管理生活管理:每月餐饮,外出报备入住管理:入住登记,寝室分配安全管理:事故记录,访客记录收费标准:入住费用,护理费用运行环境idea+mysql5.7+jdk1.8+maven3项目技术SpringBoot,MySql,ajax,MyBatis......
  • 探索Spring:Java开发的优秀框架
    简介:Spring是Java开发领域中最受欢迎和广泛应用的开源框架之一。它提供了一个全面的编程和配置模型,用于构建现代化的企业级应用程序。本博客将深入探讨Spring框架的重要特性和优势,并解释为什么Spring成为Java开发人员的首选框架。正文:介绍Spring框架Spring是一个轻量级、灵活且功......