DbConnectionStringParser


import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class DbConnectionStringParser {
public static String parserDbConnection(String connectionString) {
// 检查是否为 SQL Server
if (connectionString.toLowerCase().contains("data source") && connectionString.toLowerCase().contains("initial catalog")) {
DatabaseConfig config = new DatabaseConfig();

// 正则表达式匹配所有的参数键值对
Pattern pattern = Pattern.compile("([^=;]+)=([^;]*)");
Matcher matcher = pattern.matcher(connectionString);

while (matcher.find()) {
String key = matcher.group(1).trim();
String value = matcher.group(2).trim();

switch (key) {
case "Data source":
config.dataSource = value;
break;
case "Initial Catalog":
config.initialCatalog = value;
break;
case "user ID":
config.userId = value;
break;
case "password":
config.password = value;
break;
case "Connect Timeout":
config.connectTimeout = value;
break;
}
}
// 打印配置对象
System.out.println(config);
return "SQL Server";
}
// 检查是否为 Oracle
else if (connectionString.toLowerCase().contains("description")) {
OracleConnectionInfo connectionInfo = new OracleConnectionInfo();

// 正则表达式匹配 HOST 和 PORT
Pattern hostPortPattern = Pattern.compile("\\(HOST\\s*=\\s*(.*?)\\)\\(PORT\\s*=\\s*(\\d+)\\)");
Matcher hostPortMatcher = hostPortPattern.matcher(connectionString);

while (hostPortMatcher.find()) {
connectionInfo.addServer(hostPortMatcher.group(1), Integer.parseInt(hostPortMatcher.group(2)));
}

// 正则表达式匹配 SERVICE_NAME
Pattern serviceNamePattern = Pattern.compile("\\(SERVICE_NAME\\s*=\\s*(.*?)\\)");
Matcher serviceNameMatcher = serviceNamePattern.matcher(connectionString);

if (serviceNameMatcher.find()) {
connectionInfo.setServiceName(serviceNameMatcher.group(1));
}

System.out.println(connectionInfo);
return "Oracle";
}

return "Unknown Database Type";
}

public static void main(String[] args) {
String sqlServerConnectionString = "Data source=10.0.26.21;Initial Catalog=121333;user ID=111;password=222;Connect Timeout=90";
String oracleConnectionString = "User ID=111;Password=222;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.28.21)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST= 10.100.28.22)(PORT =1522))) (CONNECT_DATA = (SERVICE_NAME=myService)));Connect Timeout=";

parserDbConnection(sqlServerConnectionString);
parserDbConnection(oracleConnectionString);


}

}

class DatabaseConfig {
String dataSource;
String initialCatalog;
String userId;
String password;
String connectTimeout;

@Override
public String toString() {
return "DataSource: " + dataSource + ", InitialCatalog: " + initialCatalog + ", UserID: " + userId + ", Password: " + password + ", ConnectTimeout: " + connectTimeout;
}
}

class ServerInfo {
String host;
int port;

public ServerInfo(String host, int port) {
this.host = host;
this.port = port;
}

@Override
public String toString() {
return "Host: " + host + ", Port: " + port;
}
}

class OracleConnectionInfo {
List<ServerInfo> servers = new ArrayList<>();
String serviceName;

public void addServer(String host, int port) {
servers.add(new ServerInfo(host, port));
}

public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}

@Override
public String toString() {
return "Servers: " + servers + ", Service Name: " + serviceName;
}
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发指南032-调整日志级别

1) 显示SQL语句及其参数 nacos里配置 spring: jpa: show-sql: true logback-spring.xml里配置 <logger name"org.hibernate.type.descriptor.sql.BasicBinder" level"TRACE"/> 2&#xff09;feign显示调用过程 logging: level: org.qlm.feign: …

总结之LangChain(三)——模型IO缓存

一、聊天模型缓存 LangChain为聊天模型提供了一个可选的缓存层。这有两个好处&#xff1a; 如果您经常多次请求相同的完成结果&#xff0c;它可以通过减少您对LLM提供程序的API调用次数来帮您节省费用。 它可以通过减少您对LLM提供程序的API调用次数来加快您的应用程序速度。…

Spring Boot + Apache Tika 实现文档内容解析

文章目录 1. 环境准备2. 创建 Spring Boot 项目2.1 初始化项目2.2 添加 Apache Tika 依赖 3. 创建文档解析服务3.1 创建服务类3.2 创建控制器类 4. 配置和运行4.1 配置 Apache Tika 数据文件4.2 运行应用程序 5. 测试和验证5.1 使用 Postman 或 cURL 进行测试 6. 注意事项和优化…

由 Vault 支持的 KES 的 MinIO Operator

为了提供安全锁定和擦除的合规性功能&#xff0c;MinIO 使用服务器端加密 &#xff08;SSE&#xff09; 在存储层加密对象&#xff0c;以保护对象作为写入操作的一部分。MinIO 以极高的效率做到这一点——基准测试表明 MinIO 能够以接近线速进行加密/解密。 MinIO 使用的秘诀是…

postgresql数据库进阶知识

postgresql数据库进阶知识 # 如果表存在就先删除 drop table if exists student; # 创建学生表 # id serial not null 表示id自增 # id integer not null 表示id不自增 create table student (id serial not nullconstraint student_pkprimary…

小米红米全机型TWRP下载刷入教程-获取root权限--支持小米14/红米K7Pro/红米Turbo3等机型

刷机注意&#xff1a; 本教程为小米红米全机型专用TWRP_Recovery合集&#xff0c;ROM乐园独家首发整理。请确保你的电脑能正确连接你的手机&#xff0c;小米红米手机需要解锁BL&#xff0c;请参照下面教程 小米MIUI澎湃OS解锁BL教程&#xff1a;小米手机官方解锁BootLoader图文…

【抽代复习笔记】22-群(十六):模n的剩余类加群

例3&#xff1a;证明&#xff0c;群(Z,)为循环群&#xff08;即&#xff1a;全体整数集Z关于数的加法作成循环群&#xff09;。 证&#xff1a;1是整数&#xff0c;所以1∈Z&#xff1b; ①当n 0时&#xff0c;1^n 1^0 0&#xff08;0个1相加&#xff0c;结果是0&#xff…

R语言——R语言基础

1、用repeat、for、while计算从1-10的所有整数的平方和 2、编写一个函数&#xff0c;给出两个正整数&#xff0c;计算他们的最小公倍数 3、编写一个函数&#xff0c;让用户输入姓名、年龄&#xff0c;得出他明年的年龄。用paste打印出来。例如&#xff1a;"Hi xiaoming …

JQuery 开发教程入门基础

一、JQuery 概念、历史、发展、优势 JQuery 概念、历史、发展、优势-JQuery开发教程-CSDN博客 二、JQuery 开发环境搭建、运行、调试 三、JQuery 语法、遍历、数据、选择器 四、JQuery Ajax 服务器交互 JQuery Ajax教程_Ajax服务器交互-CSDN博客 五、JQuery HTML Dom操作、…

2024 Testing Expo China – Automotive I 风丘与您相约上海世博馆

2024汽车测试及质量监控博览会&#xff08;中国&#xff09;——&#xff08;Testing Expo China – Automotive&#xff09;是面向整车、零部件和系统开发的各种技术和服务的盛会&#xff0c;展示了汽车测试、开发和验证技术的各个方面&#xff0c;每年在上海举行&#xff0c;…

美国ARC与延锋安全合作,推动汽车安全气囊技术新突破

在汽车安全领域&#xff0c;安全气囊作为关键被动安全配置&#xff0c;对于保障乘客生命安全至关重要。随着汽车工业的快速发展和科技创新的持续推进&#xff0c;安全气囊技术的升级与革新显得尤为重要。2022年10月25日&#xff0c;美国ARC公司与延锋安全携手合作&#xff0c;共…

定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)

在前面的文章中&#xff0c;类中只有公用数据而无成员函数&#xff0c;而且只有1个对象。可以直接在主函数中进行输入和输出。若有多个对象&#xff0c;需要分别引用多个对象中的数据成员&#xff0c;可以写出如下程序&#xff1a; &#xff08;1&#xff09;编写程序&#xff…

Apache Arrow 和数据的未来:开放标准推动人工智能发展

Apache Arrow 是一种开源列式内存格式&#xff0c;适用于平面数据和分层数据。在现代数据湖中&#xff0c;开放数据格式&#xff08;如 Apache Arrow&#xff09;位于现代对象存储的存储层中。这些格式成为对象存储中的对象。 在最新版本中&#xff0c;Apache Arrow 宣布计划从…

WebPages 全局

WebPages 全局 概述 WebPages 全局是一个综合性的概念,涉及网站设计、开发、优化和管理的各个方面。在当今数字化时代,拥有一个功能齐全、用户友好的网站对于个人和企业来说至关重要。本文将深入探讨 WebPages 全局的相关主题,包括网站设计原则、前端和后端开发技术、搜索…

STM32F4 STD标准库串口接收中断+空闲中断例程

STM32F4 STD标准库串口接收中断空闲中断例程 &#x1f516;工程基于STM32F446 ✨用惯了STM32CubeMX傻瓜式配置&#xff0c;突然改用标准库写代码&#xff0c;初始化外设内容&#xff0c;总是丢三落四的。 &#x1f4d7;串口初始化配置 void uart_init(uint32_t bound) {//GPIO…

【通俗易懂的ChatGPT的原理简介】

通俗易懂的ChatGPT的原理简介 ChatGPT是一个令人惊叹的人工智能技术&#xff0c;它能够与人类进行自然而流畅的语言交流。其背后的原理基于一种被称为Transformer的深度学习架构&#xff0c;这种架构在处理自然语言处理&#xff08;NLP&#xff09;任务中展现了强大的效果。 T…

使用Naive UI的级联选择器 Cascader进行省市区选择

序言&#xff1a; 在进行PC版的功能开发时&#xff0c;进行客户管理时老板要让客户便捷的选择自己的省市区等信息&#xff0c;而不是让他们一个个去填写&#xff0c;这时就需要使用级联选择器来进行省市区的选择。 注&#xff1a;element ui/plus的级联选择器也是可以的。 步骤…

2024年全国青少信息素养大赛python编程复赛集训第九天编程题分享

整理资料解析答案非常不容易,感谢各位大佬给个点赞和分享吧,谢谢 今天题目较简单:适合小学组 大家如果不想阅读前边的比赛内容介绍,可以直接跳过:拉到底部看集训题目 (一)比赛内容: 【小学组】 1.了解输入与输出的概念,掌握使用基本输入输出和简单运算 为主的标准…

input radio获取不到值

问题 此方式获取radio的值 显示顺序:<input type"radio" name"radio_name" value"0" > 默认顺序 <input type"radio" name"radio_name" value"1" > 字母顺序 <input type"radio" nam…

【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项

文章目录 前言一、什么是 SMB&#xff1f;&#x1f4e2;二、如何识别中小企业的需求三、中小企业营销活动的类型四、AWS 合作伙伴可获得的其他 AWS 机会4.1 AWS IQ4.2 APN 客户参与 (ACE) 计划 前言 AWS 中小型企业 &#xff08;SMB&#xff09; 能力合作伙伴专注于帮助中小型…