Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼
一、前言??
通過,在使用springboot框架之后,就很少涉及到手動連接數(shù)據(jù)庫的方式了,但bug菌有遇到這么一個需求場景,給到你的是無上限的數(shù)據(jù)庫連接信息,要求你能按連接信息指定獲取表數(shù)據(jù),突然我就一愣,我問了問,能給我具體的那些數(shù)據(jù)庫嗎?由于是對接第三方,不確定,所以只能給到你生成好的連接信息,你只能依據(jù)它的連接信息自動連接并解析。
很完美,這不就得回到以前玩springmvc的日子么,通過連接信息手動連接數(shù)據(jù)并獲取表結(jié)構(gòu)字段,且返回該表的數(shù)據(jù)。
接下來,廢話不多說,我就給大家演示一下,具體如何實現(xiàn)?
二、正文??
接下來我還是以接口的請求方式,給大家簡單演示一下,具體場景,你們自己依據(jù)情況而定,我就給大家展示下我手動獲取本地庫指定表的表結(jié)構(gòu)字段吧。
定義一個Controller接口
/**
* 獲取指定表的字段集合
*/
@PostMapping("/get-db-columns")
@ApiOperation(value = "獲取指定表的字段集合",notes = "獲取指定表的字段集合")
public ResultResponse<List<String>> getDbColumns(@RequestBody FindDbColumnModel model){
return new ResultResponse<>(dbService.getDbColumns(model));
}如下是上接口所涉及的入?yún)Ⅲw:
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 = "數(shù)據(jù)庫url")
private String dbUrl;
@ApiModelProperty(value = "數(shù)據(jù)庫連接用戶名")
private String userName;
@ApiModelProperty(value = "數(shù)據(jù)庫連接密碼")
private String passWord;
@ApiModelProperty(value = "數(shù)據(jù)庫驅(qū)動")
private String driverClass;
@ApiModelProperty(value = "指定查詢表名")
private String tableName;
}定義一個獲取表結(jié)構(gòu)的接口
/**
* 獲取指定表的字段集合
*/
List<String> getDbColumns(FindDbColumnModel model);實現(xiàn)獲取表結(jié)構(gòu)的接口
/** * 獲取指定表的字段集合 */ @Override public List<String> getDbColumns(FindDbColumnModel model) { //與數(shù)據(jù)庫取的連接 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 { //執(zhí)行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++) { //循環(huán)獲取,再儲存到集合中。 String columnName = metaData.getColumnName(i); columnArr.add(columnName); } return columnArr; } catch (SQLException e) { e.printStackTrace(); } return new ArrayList<>(); } /**
* 獲取指定表的字段集合
*/
@Override
public List<String> getDbColumns(FindDbColumnModel model) {
//與數(shù)據(jù)庫取的連接
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 {
//執(zhí)行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++) {
//循環(huán)獲取,再儲存到集合中。
String columnName = metaData.getColumnName(i);
columnArr.add(columnName);
}
return columnArr;
} catch (SQLException e) {
e.printStackTrace();
}
return new ArrayList<>();
}如下是手動連接庫獲取Connection對象的封裝方法。
/**
* 手動連接數(shù)據(jù)庫
*
* @param url
* @param userName
* @param passWord
* @param driverClass
*/
public Connection getConn(String url, String userName, String passWord, String driverClass) {
//聲明數(shù)據(jù)庫連接對象
Connection conn = null;
try {
//加載驅(qū)動
Class.forName(driverClass);
//初始化數(shù)據(jù)庫連接,獲取連接對象
conn = DriverManager.getConnection(url, userName, passWord);
} catch (Exception e) {
e.printStackTrace();
System.out.println("獲得數(shù)據(jù)庫連接出錯");
}
return conn;
}接口測試
接下來既然我們已經(jīng)實現(xiàn)了接口,那我們就來進行測試,還是老樣子,直接通過在線接口文檔swagger進行測試,集成swagger文檔我前期文章已經(jīng)講過了,這個你們自己去看。
參數(shù)體給與正確的,我就以本地庫為例。

具體請看如下截圖,很顯然,是正常獲取到了該【grade】表的表結(jié)構(gòu)信息。

附上請求樣例:
{
"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"
}到此這篇關(guān)于Springboot如何手動連接庫并獲取指定表結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Springboot指定表結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot?Java通過API的方式調(diào)用騰訊智能體(騰訊元寶)代碼示例
這篇文章主要介紹了SpringBoot?Java通過API的方式調(diào)用騰訊智能體(騰訊元寶)的相關(guān)資料,詳細說明參數(shù)獲取及動態(tài)處理方法,提供結(jié)果字符串轉(zhuǎn)數(shù)組技巧,需要的朋友可以參考下2025-06-06
Java設(shè)置PDF有序和無序列表的知識點總結(jié)
在本篇文章中小編給大家整理了關(guān)于Java設(shè)置PDF有序和無序列表的知識點,需要的朋友們參考下。2019-03-03
Spring Boot 與 Tomcat 錯誤頁面處理機制全面解析
本文給大家介紹Spring Boot 如何與內(nèi)嵌 Tomcat 協(xié)作,實現(xiàn)高效、靈活的錯誤頁面處理機制,通過分析核心源碼,我們將揭示這一機制背后的設(shè)計哲學(xué)和實現(xiàn)細節(jié),感興趣的朋友跟隨小編一起看看吧2024-12-12
SpringBoot日期格式轉(zhuǎn)換之配置全局日期格式轉(zhuǎn)換器的實例詳解
這篇文章主要介紹了SpringBoot日期格式轉(zhuǎn)換之配置全局日期格式轉(zhuǎn)換器的實例詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
mybatis+springboot發(fā)布postgresql數(shù)據(jù)的實現(xiàn)
本文主要介紹了mybatis+springboot發(fā)布postgresql數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
java面試散列表及樹所對應(yīng)容器類及HashMap沖突解決全面分析
這篇文章主要介紹了java面試中的java散列表及樹所對應(yīng)容器類與HashMap沖突解決的問題總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Prometheus 入門教程之SpringBoot 實現(xiàn)自定義指標(biāo)監(jiān)控
這篇文章主要介紹了Prometheus 入門教程之SpringBoot 實現(xiàn)自定義指標(biāo)監(jiān)控,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

