Springboot手动连接库并获取指定表结构的示例代码

 更新时间:2023年07月14日 09:50:12   作者:bug菌¹  
这篇文章主要介绍了Springboot手动连接库并获取指定表结构的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、前言🔥

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

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

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

二、正文🔥

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

定义一个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;
}

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

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

实现获取表结构的接口

    /**     * 获取指定表的字段集合     */    &#64;Override    public List<String> getDbColumns(FindDbColumnModel model) {        //与数据库取的连接        Connection conn &#61; this.getConn(model.getDbUrl(), model.getUserName(), model.getPassWord(), model.getDriverClass());        //拼接分页sql(以mysql为例)        String sql &#61; &#34;select * from &#34; &#43; model.getTableName();        //申明PreparedStatement        PreparedStatement pst &#61; null;        try {            //执行SQL语句            pst &#61; conn.prepareStatement(sql);            ResultSet rs &#61; pst.executeQuery(sql);            ResultSetMetaData metaData &#61; rs.getMetaData();            //定义一个存放所有列名的集合            List<String> columnArr &#61; new ArrayList<>();            //获取表字段名            for (int i &#61; 1; i <&#61; metaData.getColumnCount(); i&#43;&#43;) {                //循环获取&#xff0c;再储存到集合中。                String columnName &#61; metaData.getColumnName(i);                columnArr.add(columnName);            }            return columnArr;        } catch (SQLException e) {            e.printStackTrace();        }        return new ArrayList<>();    }    /**
     * 获取指定表的字段集合
     */
    @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;
    }

接口测试

         接下来既然我们已经实现了接口,那我们就来进行测试,还是老样子,直接通过在线接口文档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"
}

到此这篇关于Springboot如何手动连接库并获取指定表结构的文章就介绍到这了,更多相关Springboot指定表结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中List接口与实现类介绍

    java中List接口与实现类介绍

    大家好,本篇文章主要讲的是java中List接口与实现类介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 值得Java程序猿阅读的书籍

    值得Java程序猿阅读的书籍

    这篇文章主要推荐了一些值得Java程序猿阅读的书籍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • mybatis拦截器与分页插件实例教程

    mybatis拦截器与分页插件实例教程

    Mybatis拦截器常常会被用来进行分页处理。所以下面这篇文章主要给大家介绍了关于mybatis拦截器与分页插件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 详解SpringBoot中实现依赖注入功能

    详解SpringBoot中实现依赖注入功能

    这篇文章主要介绍了详解SpringBoot中实现依赖注入功能,SpringBoot的实现方式基本都是通过注解实现的。有兴趣的可以了解一下。
    2017-04-04
  • 在SpringBoot 中从application.yml中获取自定义常量方式

    在SpringBoot 中从application.yml中获取自定义常量方式

    这篇文章主要介绍了在SpringBoot 中从application.yml中获取自定义常量方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Java中Integer类型值相等判断方法

    Java中Integer类型值相等判断方法

    这篇文章主要给大家介绍了关于Java中Integer类型值相等判断的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建

    JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建

    本文主要介绍了如何在Eclipse中创建的Maven Project,本文是JavaEE开发的开篇,也是基础。下面内容主要包括了JDK1.8的安装、JavaEE版本的Eclipse的安装、Maven的安装、Tomcat 9.0的配置、Eclipse上的M2Eclipse插件以及STS插件的安装。
    2017-03-03
  • Quarkus的Spring扩展快速改造Spring项目

    Quarkus的Spring扩展快速改造Spring项目

    这篇文章主要为大家介绍了Quarkus的Spring项目扩展,带大家快速改造Spring项目示例演绎,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • java中实体类和JSON对象之间相互转化

    java中实体类和JSON对象之间相互转化

    Java中关于Json格式转化Object,Map,Collection类型和String类型之间的转化在我们实际项目中应用的很是普遍和广泛。最近工作的过程中也是经常有,因此,自己封装了一个类分享给大家。
    2015-05-05
  • SpringMVC中的常用注解源码及解析

    SpringMVC中的常用注解源码及解析

    这篇文章主要介绍了SpringMVC中的常用注解源码及解析,SpringMVC是一种基于Java的Web框架,它使用了许多注解来简化开发过程,本文列举了一些常用的注解,需要的朋友可以参考下
    2023-10-10

最新评论