Springboot如何手动连接库并获取指定表结构

news2025/2/21 21:40:51

一、前言🔥

        通过,在使用springboot框架之后,就很少涉及到手动连接数据库的方式了,但bug菌有遇到这么一个需求场景,给到你的是无上限的数据库连接信息,要求你能按连接信息指定获取表数据,突然我就一愣,我问了问,能给我具体的那些数据库吗?由于是对接第三方,不确定,所以只能给到你生成好的连接信息,你只能依据它的连接信息自动连接并解析。

        很完美,这不就得回到以前玩springmvc的日子么,通过连接信息手动连接数据并获取表结构字段,且返回该表的数据。

        接下来,废话不多说,我就给大家演示一下,具体如何实现?

二、正文🔥

        接下来我还是以接口的请求方式,给大家简单演示一下,具体场景,你们自己依据情况而定,我就给大家展示下我手动获取本地库指定表的表结构字段吧。

1️⃣定义一个Controller接口

    /**
     * 获取指定表的字段集合
     */
    @PostMapping("/get-db-columns")
    @ApiOperation(value = "获取指定表的字段集合",notes = "获取指定表的字段集合")
    public ResultResponse<List<String>> getDbColumns(@RequestBody FindDbColumnModel model){
        return new ResultResponse<>(dbService.getDbColumns(model));
    }

如下是上接口所涉及的入参体:

package com.example.demo.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @author luoYong
 * @version 1.0
 * @date 2022/8/30 16:02
 */
@Data
@ApiModel(value = "获取指定表的字段集合", description = "获取指定表的字段集合")
public class FindDbColumnModel {

    @ApiModelProperty(value = "数据库url")
    private String dbUrl;

    @ApiModelProperty(value = "数据库连接用户名")
    private String userName;

    @ApiModelProperty(value = "数据库连接密码")
    private String passWord;

    @ApiModelProperty(value = "数据库驱动")
    private String driverClass;

    @ApiModelProperty(value = "指定查询表名")
    private String tableName;
}

 2️⃣定义一个获取表结构的接口

    /**
     * 获取指定表的字段集合
     */
    List<String> getDbColumns(FindDbColumnModel model);

3️⃣实现获取表结构的接口

    /**
     * 获取指定表的字段集合
     */
    @Override
    public List<String> getDbColumns(FindDbColumnModel model) {
        //与数据库取的连接
        Connection conn = this.getConn(model.getDbUrl(), model.getUserName(), model.getPassWord(), model.getDriverClass());

        //拼接分页sql(以mysql为例)
        String sql = "select * from " + model.getTableName();
        //申明PreparedStatement
        PreparedStatement pst = null;
        try {
            //执行SQL语句
            pst = conn.prepareStatement(sql);
            ResultSet rs = pst.executeQuery(sql);
            ResultSetMetaData metaData = rs.getMetaData();
            //定义一个存放所有列名的集合
            List<String> columnArr = new ArrayList<>();
            //获取表字段名
            for (int i = 1; i <= metaData.getColumnCount(); i++) {
                //循环获取,再储存到集合中。
                String columnName = metaData.getColumnName(i);
                columnArr.add(columnName);
            }
            return columnArr;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }

如下是手动连接库获取Connection对象的封装方法。

    /**
     * 手动连接数据库
     *
     * @param url
     * @param userName
     * @param passWord
     * @param driverClass
     */
    public Connection getConn(String url, String userName, String passWord, String driverClass) {

        //声明数据库连接对象
        Connection conn = null;
        try {
            //加载驱动
            Class.forName(driverClass);
            //初始化数据库连接,获取连接对象
            conn = DriverManager.getConnection(url, userName, passWord);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("获得数据库连接出错");
        }
        return conn;
    }

 4️⃣接口测试

         接下来既然我们已经实现了接口,那我们就来进行测试,还是老样子,直接通过在线接口文档swagger进行测试,集成swagger文档我前期文章已经讲过了,这个你们自己去看。

        参数体给与正确的,我就以本地库为例。

 具体请看如下截图,很显然,是正常获取到了该【grade】表的表结构信息。

附上请求样例:

{
	"dbUrl": "jdbc:mysql://127.0.0.1:3306/springboot_db?serverTimezone=GMT%2B8",
	"userName": "root",
	"passWord": "123456",
	"driverClass": "com.mysql.cj.jdbc.Driver",
	"tableName": "grade"
}

  ... ...

       ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

 三、往期推荐🔥

  • springboot系列(一):如何创建springboot项目及启动
  • springboot系列(二):yaml、properties两配置文件介绍及使用

  • springboot系列(三):多环境切换,实例演示
  • springboot系列(四):stater入门
  • springboot系列(五):史上最最最全springboot常用注解
  • springboot系列(六):mysql配置及数据库查询
  • springboot系列(七):如何通过mybatis-plus实现接口增删改查
  • springboot系列(八):mybatis-plus之条件构造器使用手册
  • springboot系列(九):mybatis-plus之如何自定义sql
  • springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
  • springboot系列(十一):实现多数据源配置,开箱即用
  • springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
  • springboot系列(十三):如何实现发送普通邮件?你一定得会
  • springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
  • springboot系列(十五):如何实现静态邮件模板发送?你一定得会
  • springboot系列(十六):如何实现发送邮件提醒,附完整源码
  • springboot系列(十七):集成在线接口文档Swagger2
  • springboot系列(十八):如何Windows安装redis?你玩过么
  • springboot系列(十九):如何集成redis?不会我教你
  • springboot系列(二十):如何通过redis实现手机号验证码功能 
  • ... ...

四、文末🔥

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

 滴~如下介绍下前30章节的Spring Boot基础篇学习大纲,请小伙伴们注意查收。 

导读:SpringBoot 学习指南(附思维导图)

Spring Boot入门(01):Spring Boot的奋斗成长史

Spring Boot入门(02):快速开发环境搭建和项目启动

Spring Boot入门(03): yaml、properties配置文件介绍及使用

Spring Boot入门(04):多环境切换,实例演示

Spring Boot入门(05):starter基础入门

Spring Boot入门(06):Spring Boot常用注解大全

Spring Boot入门(07):整合 MySQL 和 Druid数据源(两万字教学)

Spring Boot入门(08):整合Mybatis访问MySQL实现增删改查

Spring Boot入门(09):使用MyBatis的XML配置方式访问MySQL实现增删改查

Spring Boot入门(10): mybatis之xml映射文件>、<=等特殊符号写法

Spring Boot入门(11):Spring Boot 整合 JPA

Spring Boot入门(12):整合Mybatis-Plus mybatis-plus实现接口增删改查

Spring Boot入门(13): Mybatis-Plus之条件构造器使用手册

Spring Boot入门(14): mybatis-plus之如何自定义sql

Spring Boot入门(15):Spring Boot 整合 MyBatis-Plus AutoGenerator 自动生成项目骨架代码

Spring Boot入门(16):Spring Boot整合Swagger-UI实现在线API文档

Spring Boot入门(17):Spring Boot整合Knife4j,美化强化丑陋的Swagger

Spring Boot入门(18):Spring Boot静态资源映射

Spring Boot入门(19):Spring Boot 整合 Thymeleaf 模板引擎,开发Web页面

Spring Boot入门(20):实现多数据源配置,开箱即用

Spring Boot入门(21):整合Log4j2以及配置详解

Spring Boot入门(22):整合LogBack 实现日志文件本地保存

Spring Boot入门(23):Spring Boot基于AOP拦截日志

Spring Boot入门(24):Spring Boot事务

Spring Boot入门(25):过滤器、拦截器、监听器对比及使用场景

Spring Boot入门(26):实现邮件发送简单邮件、附件邮件、嵌入资源(图片)邮件、模板邮件等

Spring Boot入门(27):war包部

Spring Boot入门(28):jar包部署

Spring Boot入门(29):如何实现热部署

Spring Boot入门(30):Windows安装Redis客户端?你玩过么

... ...

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

最后送大家两句我很喜欢的话,与诸君共勉


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

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

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

相关文章

玩机搞机---另类操作 修改原生卡刷包转换为线刷包方式刷机

偶然给安卓机型刷写原生安卓的系统。可能其第三方twrp原因或者底包原因导致卡刷一直报错。虽然最终写入开机&#xff0c;但浪费时间&#xff0c;究其原因还在于分区切换和挂载分区导致的。写这篇博文的意义不是在于让玩家按步骤转换线刷&#xff0c;只是明白其分区写入的原理 索…

【JavaEE初阶】TCP/IP协议(二)

文章目录 网络层重点协议IP协议地址管理路由选择 数据链路层重点协议以太网协议MTU 应用层重要协议DNS&#xff08;域名解析系统&#xff09; 网络层重点协议 IP协议 协议头格式如下&#xff1a; 4位版本号&#xff08;version&#xff09;&#xff1a;指定IP协议的版本&am…

2023-6-28-第十一式代理模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

解读 RocketMQ 5.0 全新的高可用设计

作者&#xff1a;斜阳 高可用架构演进背景 在分布式系统中不可避免的会遇到网络故障&#xff0c;机器宕机&#xff0c;磁盘损坏等问题&#xff0c;为了向用户不中断且正确的提供服务&#xff0c;要求系统有一定的冗余与容错能力。RocketMQ 在日志&#xff0c;统计分析&#x…

Selenium系列(二) - 详细解读针对浏览器的操作

控制浏览器有哪些操作&#xff1f; 最大化、最小化浏览器控制、获取浏览器大小获取当前标签页title、url前进、后退、刷新执行js语句打开、关闭新标签页滚动页面 点击右边目录即可跳转哦&#xff01; -------------->>>>>>>>>> 最大化、最小化…

从零开始 Spring Boot 51:JPA 中的默认列值

从零开始 Spring Boot 51&#xff1a;JPA 中的默认列值 图源&#xff1a;简书 (jianshu.com) JPA 是一个 ORM 框架&#xff0c;因此&#xff0c;通常我们需要在实体类中定义表结构&#xff0c;这其中就包含可能的字段默认值。 本文介绍如何在 Hibernate&#xff08;JPA&#…

HBase(6):计数操作

1 需求 查看HBase中的ORDER_INFO表&#xff0c;一共有多少条记录。 2 count命令 count命令专门用来统计一个表中有多少条数据。语法&#xff1a; count 表名 注意&#xff1a;这个操作是比较耗时的。在数据量大的这个命令可能会运行很久&#xff0c;真实环境不要使用该命令。…

【从零开始学习JAVA | 第二十五篇】泛型

目录 前言&#xff1a; 泛型&#xff1a; 额外拓展&#xff1a; 总结&#xff1a; 前言&#xff1a; 本文将详细介绍之前我们在JAVA 中一直在讲的泛型&#xff0c;各位感兴趣的同学可以点击进来观看。 泛型&#xff1a; 泛型是一种编程概念&#xff0c;它允许在定义类、接…

文章测试

Markdown示例 本文件的源码是一个markdown文件,也就是说在本工程中直接添加markdown即可嵌入到sphinx文档中。 关于使sphinx支持markdown的详细配置说明&#xff0c;请参考文档markdown-sphinx。 markdown的公式语法在sphinx可能不支持。 以下是markdown的语法使用示例 文…

PDF如何转换成Word?PDF转Word方法分享!​

PDF大家都不陌生了吧&#xff1f;作为打工人&#xff0c;学生党的大家都知道&#xff0c;PDF是现在不可或缺的文件传输工具之一&#xff0c;不仅可将文档转为Word&#xff0c;还可以转成excel,ppt等各种形式&#xff0c;其重要性不言而喻&#xff0c;那么今天小编就跟大家具体说…

Web自动化元素定位之xpath定位详解

Web自动化常见的定位方式 为什么要学习定位 1.让程序操作指定元素&#xff0c;就必须先找到此元素 2.程序不像人类用眼睛直接定位到元素 webDriver提供了八种定位元素的方式 定位方式总结 1.id、name、class_name、tag_name:根据元素的标签或元素的属性来进行定位 2.link_t…

gitLab配置ssh实现私钥访问

1.配置ssh文件 1.cd C:\Users\用户名\.ssh 找到文件夹 删除.ssh 里面所有其他文件方面我们配置要最新的 2.win r cmd 呼出命令行 ssh-keygen -t rsa -C "必须对应gitLab用户名" 3.生成文件夹拿到ssh 4.复制id_rsa_pub 文件的全部字符串 公钥给到GitLab服务器 2.公…

使用 JavaScript 在没有插件的情况下输入文本掩码

文章目录 JavaScript 中信用卡号的输入掩码JavaScript 中的邮政编码输入掩码在 JavaScript 中使用括号输入掩码的电话号码为 JavaScript 中的不同字段自定义输入掩码 JavaScript 输入掩码或掩码文本框是一种控件&#xff0c;它为用户提供了一种简单可靠的方式来收集基于标准掩码…

【Servlet学习三】实现一个内存版本的简易计算器~

目录 一、方式1&#xff1a;使用form表单的形式&#xff08;不推荐&#xff09; &#x1f308;1、前端代码&#xff1a;HTML文件 &#x1f308;2、后端代码&#xff1a;Calculator_form.java文件 &#x1f308;3、最终效果 二、方式2&#xff1a;使用ajax形式&#xff08;…

力扣 105. 从前序与中序遍历序列构造二叉树

题目来源&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/ C题解&#xff1a;前序遍历是中左右&#xff0c;中序遍历是左中右&#xff0c;所以拿到两个遍历数组&#xff0c;我们可以从前序遍历首节点获取中间…

Docker 私有仓库

一、私有仓库搭建 拉取私有仓库镜像 docker pull registry 启动私有仓库 docker run -id --nameprivate_registry -p 5000:5000 registry 打开浏览器输入 http://私有仓库服务器IP地址:5000/v2/_catalog 修改 daemon.json 文件 sudo gedit /etc/docker/daemon.json 在…

在Mapper.xml中写复杂的动态SQL语句

说明&#xff1a;在三层架构开发中&#xff0c;使用Mybatis框架操作数据库有两种方式&#xff0c;一种是在Mapper类里的方法上加注解&#xff08;Select、Insert等&#xff09;&#xff0c;另一种是在Mapper.xml文件的标签内写SQL语句。第二种方式相比第一种&#xff0c;具有更…

electron webview 页面加载事件顺序

electron webview 页面加载事件顺序 1.did-start-loading 页面开始加载web 2.load-commit 主页面文档加载框架 3.page-title-updated titledom 4.dom-ready 主页面 dom 加载完成electron 5.load-commit frame文档加载.net 6.did-frame-finish-load frame 加载完成cdn 7.d…

Springboot钉钉免密登录集成(钉钉小程序和H5微应用)

欢迎访问我的个人博客:www.ifueen.com RT&#xff0c;因为业务需要把我们系统集成到钉钉里面一个小程序和一个H5应用&#xff0c;并且在钉钉平台上面实现无感登录&#xff0c;用户打开我们系统后不需要再输入密码即可登录进系统&#xff0c;查阅文档实际操作过之后记录一下过程…

HTML转EXE工具(HTML App Build)永久免费版

HTML转EXE工具&#xff08;HTM2EXE&#xff09;在CSDN上发布时间轴&#xff1a; 序号时间链接12022-08-17HTML转EXE工具&#xff08;HTML App Build&#xff09;初始版22023-02-18HTML转EXE工具&#xff08;HTML App Build&#xff09;最新版32023-06-23&#xff08;实际未发布…