Java:基于JDBC数据连接池方式同步第三方数据库表信息数据

news2025/1/11 6:04:32

在这里插入图片描述

前言

  • 最近遇到一个需求就是要拉取第三方的数据信息,但是第三方那边又没有对外暴露对接接口,只给出了具体的数据库连接信息和具体表信息
  • 基于第三方给出的有效信息,我采取了用 JDBC 传统的方式去进行数据拉取
  • 注意:前置条件两端的网要互通,否则拉取无效

方案

  • 这里我抽取成了一个工具类,可以根据不同的业务场景进行调用
//参数举例
	private final static String url = "jdbc:mysql://[IP]:[端口号]/xxx?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true";
    private final static String className = "com.mysql.jdbc.Driver";
    private final static String user = "账号";
    private final static String password = "密码";


public class JdbcUtils {
    /**
     * 根据数据连接池信息获取数据
     *
     * @param jdbcDriver 驱动程序
     * @param dbUrl      数据库链接地址
     * @param user       账号
     * @param pass       密码
     * @param sql        执行SQL脚本
     * @return list 存储返回结果
     */
    public static List obtainDataBasedOnTheDataConnectionPoolInfo(String jdbcDriver, String dbUrl, String user, String pass, String sql) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.加载驱动程序
            Class.forName(jdbcDriver);
            //2.获得数据库链接
            conn = DriverManager.getConnection(dbUrl, user, pass);
            //3.通过数据库的连接操作数据库,实现增删改查
            stmt = conn.createStatement();
            //4.执行查询sql语句 并把数据库表中记录返回到 ResultSet 对象中进行保存
            rs = stmt.executeQuery(sql);
            //5.获取表结构
            ResultSetMetaData metaData = rs.getMetaData();
            //6.获取字段数
            int columnCount = metaData.getColumnCount();
            //存储返回结果
            List list = new ArrayList();
            //7.处理数据库的返回结果
            while (rs.next()) {
                Map map = new HashMap();
                for (int i = 1; i <= columnCount; i++) {
                    //8.获取字段名称 metaData.getColumnName(i)
                    map.put(metaData.getColumnName(i), rs.getObject(i));
                }
                list.add(map);
            }
            LogUtils.log.info("JDBC工具类获取到的数据信息为:{}", JSON.toJSONString(list));
            return list;
        } catch (Exception e) {
            LogUtils.log.error("JDBC工具类处理 Class.forName 错误:{}", e);
        } finally {
            //9.关闭资源,调用自定义的close()方法
            close(rs);
            close(stmt);
            close(conn);
        }
        return null;
    }

    /**
     * 自定义资源关闭方法
     *
     * @param closeable
     */
    public static void close(AutoCloseable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (Exception e) {
                LogUtils.log.error("JDBC工具类获取对应数据信息,数据库连接池关闭资源异常:{}", e);
            }
        }
    }
}

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

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

相关文章

收费站对讲广播系统方案

收费站对讲广播系统方案 收费站对讲广播系统是一种用于收费站内部通信和广播传输的系统。它能够实现不同收费站点之间的语音通信和广播&#xff0c;以便快速、准确地传达信息和指令。该系统通常由以下几个核心组件组成&#xff1a;1. 主控台&#xff1a;主控台是系统的中心控制…

cocos shader在编辑器正常,浏览器上不显示

问题出在需要将图片的package属性取消勾选。如果用的单色精灵&#xff0c;那么可以将系统的白色图片复制一份再取消勾选。 相关链接&#xff1a; shader在浏览器上不显示 - Creator 2.x - Cocos中文社区

Redis高级篇(一)

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a;RDB持久化、AOF持久化 1.1.RDB持久化 什么是RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&am…

第一章 JavaScript --下

第一章 JavaScript --下 2.5.6 DOM操作 由于实际开发时基本上都是使用JavaScript的各种框架来操作&#xff0c;而框架中的操作方式和我们现在看到的原生操作完全不同&#xff0c;所以下面罗列的API仅供参考&#xff0c;不做要求。 2.5.6.1 在整个文档范围内查询元素节点 功…

XUbuntu22.04之vim无法复制内容到系统(一百八十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

2023年7月14日,ArrayList

集合框架图&#xff1a; 集合和数组的区别 AarrayList ArrayList底层实现原理 ArrayList的底层实现是基于数组的动态扩容。 初始容量&#xff1a;当创建一个新的ArrayList对象时&#xff0c;它会分配一个初始容量为10的数组。这个初始容量可以根据需求进行调整。 //表示默认的初…

CS162 9-10

lecture9 thread lecture10 I/O层 调度 1.最小化响应时间 2.最大化吞吐量 3.分配时间公平 FCFS 后面的短请求&#xff0c;要等待前面的长请求。 Round Robin Scheduling Each process gets a small unit of CPU time (time quantum), usually 10-100 milliseconds – …

layui会议OA项目数据表格新增改查

文章目录 前言一、后台代码编写1.1 数据表优化1.2 R工具类1.3 UserDao新增改查1.4 Servlet的编写 二、前台页面的编写2.1 userManege.jsp2.2 userManage.js2.3 新增、修改用户共用jsp2.4add、edit的js 三、演示3.1 查询3.2 新增3.3 修改3.4 删除 前言 在上篇博客我们实现了左侧…

山东农信:一云多芯助力金融活水普惠齐鲁大地

农业金融正走在发展的关键路口。 一方面&#xff0c;我国全面推进乡村振兴、加快建设农业强国&#xff0c;需要形成和健全金融支农服务体系&#xff0c;为三农发展提供多元金融服务&#xff1b;另一方面&#xff0c;在大数据、云计算、人工智能等数字化的驱动下&#xff0c;数…

实战 ➾【Red Hat 搭建部署VSFTPd服务】

实战 ➾【Red Hat 搭建部署VSFTPd服务】 &#x1f53b; 前言&#x1f53b; 一、vsFTPd服务部署&#x1f6a5; 1.1 vsFTPd服务安装&#x1f6a5; 1.2 vsFTPd服务的启动与关闭 &#x1f53b; 二、vsFTPd相关配置&#x1f6a5; 2.1 vsFTPd的相关配置文件&#x1f6a5; 2.2 配置匿名…

【无标题】使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样

问题&#xff1a;使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样&#xff0c;在mac下&#xff0c;一切正常&#xff0c;看起来很舒服&#xff0c;但是当我把页面放在扩展屏幕下&#xff08;27寸&#xff09;&#xff0c;再生成一个pdf&#xff0c;虽然排版一…

深入理解Windows操作系统机制(二)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。 我们每天都在用Windows操作系统&#xff0c;但是其实我们每天直接在打交道的并不是Windows操作系统的内核&#xff0c;而是Windows操作系统…

Linux 磁盘满了的解决方案

步骤说明&#xff1a; 第一步&#xff1a;查看磁盘情况 我们要知道哪个磁盘&#xff0c;我们首先要知道各个磁盘占用情况&#xff01;可以使用以下命令 # 查看磁盘状态 df -h 解释一下&#xff1a; df: 用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。 -h&…

为 GitHub 设置 SSH 密钥

1. 起因 给自己的 github 改个名&#xff0c;顺便就给原来 Hexo 对应的仓库也改了个名。然后发现 ubhexo clean && hexo generate && hexo deploy 失败了&#xff0c;报错如下&#xff1a; INFO Deploying: git INFO Clearing .deploy_git folder... INFO …

【淘宝API接口系列】,商品详情接口响应参数有哪些?响应示例是否满足

商品数据&#xff1a;淘宝提供了商品的基本信息&#xff0c;包括商品名称、描述、规格、价格、销量、库存等信息。此外&#xff0c;也可以通过淘宝提供的API接口来获取商品的图片、评价、物流信息等详细数据。 响应参数 Version: Date:2022-04-04 名称类型必须示例值描述 ite…

设计模式概述及七大原则

一、设计模式的目的 编写软件过程中&#xff0c;我们会面临着来自耦合性&#xff0c;内聚性以及可维护性&#xff0c;可扩展性&#xff0c;重用性&#xff0c;灵活性等多方面的挑战&#xff0c;设计模式是为了让程序(软件)&#xff0c;具有更好&#xff1a; 代码重用性 (即&a…

微信小程序下拉刷新获取数据和触底事件刷新实现

一、下拉刷新 1.json文件 说明&#xff1a;开启下拉刷新&#xff0c;然后设置窗口的背景色&#xff0c;方便观看。 "enablePullDownRefresh": true,"backgroundColor":"#FFC0CB" 2. js文件 说明&#xff1a;重新发起请求&#xff0c;并显示加…

c++11 标准模板(STL)(std::basic_istream)(八)

定义于头文件 <istream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的…

【AT89C52单片机项目】音乐播放器的设计

实验目的 用51系列单片机设计一个可以切歌的音乐播放器。 实验仪器 AT89C52单片机。 音乐播放模块。 设计要求 采用重装定时器计数方式1的初值来实现发出不同频率的声音&#xff0c;通过控制延时长度来实现不同的节拍&#xff0c;之后将音乐数据表填入&#xff0c;即可实…

【python】python汽车保险数据分析(数据+代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、51CTO技术博主 &#x…