springboot系列(三十三):springboot如何手动连接库并获取指定表结构|超级详细,建议收藏(代码片段)

bug菌¹ bug菌¹     2022-12-08     364

关键词:

👨‍🎓 作者:bug菌

🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

【开发云】年年都是折扣价,不用四处薅羊毛

         嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

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

 三、往期推荐🔥

四、文末🔥

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

【开发云】年年都是折扣价,不用四处薅羊毛

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

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


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

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


​​​

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

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

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

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

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

springboot系列(三十三):springboot如何手动连接库并获取指定表结构|超级详细,建议收藏(代码片段)

👨‍🎓作者:bug菌🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。... 查看详情

java精选面试题之springboot三十三问

SpringBootSpringBoot是微服务中最好的Java框架.我们建议你能够成为一名SpringBoot的专家.问题一:SpringBoot、SpringMVC和Spring有什么区别?SpringFrameSpringFramework最重要的特征是依赖注入。所有SpringModules不是依赖注入就是IOC控制反转。当我们... 查看详情

powershell管理系列(三十三)powershell操作之查询ad账号对应的ou存放位置

-----提供ADExchangeLyncSharepointCRMSCO365等微软产品实施及外包,QQ:185426445.电话18666943750需求:找出每个AD用户所对应的OU所在位置步骤1:2008R2的AD域环境,命令如下Import-Moduleactivedirectory$user=Get-ADUser-Filter*-Properties*-SearchBase 查看详情

qt系列文章之三十三(基于qthread的信号量的线程同步)

系列大纲文章目录前言信号量的原理双缓冲区数据采集和读取线程类设计线程实例信号量的使用效果图前言  本章将是QThread中最后一个有关同步的方法介绍了,可能很少有人会用到使用信号量,不过了解该机制也是不错的,... 查看详情

qt系列文章之三十三(基于qthread的信号量的线程同步)

系列大纲文章目录前言信号量的原理双缓冲区数据采集和读取线程类设计线程实例信号量的使用效果图前言  本章将是QThread中最后一个有关同步的方法介绍了,可能很少有人会用到使用信号量,不过了解该机制也是不错的,... 查看详情

《c#零基础入门之百识百例》(三十三)方法参数--位置&命名参数--求长方体体积

...习目标3.3参考代码前言本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信... 查看详情

swift系列三十三-面向协议编程(代码片段)

面向协议编程(ProtocolOrientedProgramming,简称POP)是Swift的一种编程范式,Apple于2015年WWDC提出。在Swift的标准库中,能见到大量POP的影子。一、POP和OOP1.1.回顾OOPSwift也是一门面向对象的编程语言(ObjectOrientedPr... 查看详情

[系统安全]三十三.恶意代码检测基于机器学习的恶意代码检测技术(代码片段)

...毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更... 查看详情

springboot系列(三十二):springboot集成kafka(环境搭建+演示)|超级详细,建议收藏(代码片段)

👨‍🎓作者:bug菌🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。... 查看详情

springboot系列(三十二):springboot集成kafka(环境搭建+演示)|超级详细,建议收藏(代码片段)

👨‍🎓作者:bug菌🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。... 查看详情

unitygameframework✨(三十三)福利:教你从程序外部加载excel文件

哈喽大家好,你的橙哥突然出现~本系列博客地址:传送门一、效果展示今天完成了客户的一个小的需求:在程序外,客户配置Excel表,程序去读取他配置的Excel表,完成根据表中的路径,加载图片、视频等功能。特分享给大家,... 查看详情

mysql基础第三十三天,改善性能

查看详情

三十三modules(代码片段)

1:方法一:导入整个模块importmathclassModulesDemo():defbuiltin_modules(self):print(math.sqrt(100))m=ModulesDemo()m.builtin_modules()   方法二:只导入用到的部分frommathimportsqrtclassModulesDemo():defbuiltin_m 查看详情

学习三十三

八周三次课(3月28日)10.32/10.33rsync通过服务同步10.34linux系统日志10.35screen工具扩展Linux日志文件总管logrotatehttp://linux.cn/article-4126-1.htmlxargs用法详解http://blog.csdn.net/zhangfn2011/article/details/6776925rsync通过服务同步rsync可 查看详情

学习总结(三十三)

1.守护进程     1)什么是守护进程         进程是一个正在运行的程序,守护进程也是一个进程,守护进程的意思就是一个进程保护另一个进程     2)守护进程使用... 查看详情

leetcode刷题三十三(代码片段)

leetcode刷题三十三题目叙述https://leetcode-cn.com/problems/pascals-triangle-ii/给定一个非负索引rowIndex,返回「杨辉三角」的第rowIndex行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。杨辉三角如下所示:题目解答具体的思路... 查看详情

vue2.0学习—键盘事件(三十三)(代码片段)

【Vue2.0学习】—键盘事件(三十三)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content=&# 查看详情

(三十三)订单管理-修改订单状态

修改订单的状态:例如:后台页面点击发货的需要将订单的状态修改在客户的页面上查询我的订单,点击确认收货的时候修改订单的状态1.点击修改状态/store/adminOrder?method=updateState&oid=??state=??2.在updatestate方法中,接受参数oidstate调... 查看详情