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 热部署的知识

    深入学习Java 热部署的知识

    对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。,需要的朋友可以参考下
    2019-06-06
  • java中Struts2文件上传问题详解

    java中Struts2文件上传问题详解

    文件上传和文件下载是我们在web应用程序中常用的两个功能,在java中,实现这两种功能的方式也有很多种,其中struts2就给我们提供了一种算是比较简单的方式吧,下面我们就一起来看一下,
    2015-07-07
  • Java获取时间打印到控制台代码实例

    Java获取时间打印到控制台代码实例

    这篇文章主要介绍了Java获取时间打印到控制台代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ)

    详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ)

    这篇文章主要介绍了详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • springboot项目中使用Swagger的简单示例

    springboot项目中使用Swagger的简单示例

    大趋势下目前很多的项目都采用了前后端分离的方式进行开发,最近我接触到的项目大多数都是采用了前后端分离的方式进行开发,下面这篇文章主要给大家介绍了关于springboot项目中使用Swagger的简单示例,需要的朋友可以参考下
    2023-04-04
  • Spring Security学习之rememberMe自动登录的实现

    Spring Security学习之rememberMe自动登录的实现

    这篇文章主要给大家介绍了关于Spring Security学习之rememberMe自动登录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • JAVA中的字段校验(validation)

    JAVA中的字段校验(validation)

    这篇文章主要介绍了JAVA中的字段校验(validation)用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 在eclipse中安装Scala环境的步骤详解

    在eclipse中安装Scala环境的步骤详解

    这篇文章主要介绍了在eclipse中安装Scala环境的步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Java实现京东联盟API数据获取功能

    Java实现京东联盟API数据获取功能

    这篇文章介绍了Java获取京东联盟API数据的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java获取文件路径常用方法解析

    Java获取文件路径常用方法解析

    这篇文章主要介绍了Java获取文件路径常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论