java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot指定表结构

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

作者: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指定表结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文