如何使用 JdbcTemplate 检查表列是不是存在?

Posted

技术标签:

【中文标题】如何使用 JdbcTemplate 检查表列是不是存在?【英文标题】:How to check if a table column exists using JdbcTemplate?如何使用 JdbcTemplate 检查表列是否存在? 【发布时间】:2021-09-21 00:46:44 【问题描述】:

我正在尝试编写一个查询来检查该表中是否存在列。据我所知,我只能查询列的行。我想知道是否有办法查询表中的列是否存在?

String currentTable = "";
final Query query = dslContext
        .select(field(COLUMN_COUNTRY_CODE))
        .from(MANAGEMENT_TABLE_NAME)
        .orderBy(field(COLUMN_CREATE_DATE).desc())
        .limit(inline(1));
currentTable = jdbcTemplate.queryForObject(query.getSQL(), String.class);

这就是我的查询目前的样子。我想检查COLUMN_COUNTRY_CODE 列表是否存在于MANAGEMENT_TABLE_NAME 中。我该怎么做呢?

【问题讨论】:

您需要查询数据库元数据,而不是表本身。 备案,还有DSLContext.meta()查询JDBC的DatabaseMetaData 【参考方案1】:

使用 JDBC,您可以通过创建 DatabaseMetaData 的实例来实现这一点,如下所示:

DatabaseMetaData databaseMetaData = connection.getMetaData();

您的Connection 对象是JdbcConnection 的一个实例。

接下来,通过使用getColumns() 方法,您可以遍历特定表的列并检查它们的名称。

代码示例:

    ResultSet columns = databaseMetaData.getColumns(null,null, "TABLE_NAME", null);
while(columns.next()) 
    String columnName = columns.getString("COLUMN_NAME");    

Source

【讨论】:

以上是关于如何使用 JdbcTemplate 检查表列是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:检查表列是不是存在并删除行

如何在 QueryExpression::addCase() 中使用表列而不是变量

如何使用 pyspark 将 null 分配给配置单元表列

用于检查工作表列值的 Google 脚本

在 Laravel 中如何通过 Model 知道表列是不是为外键?

检查表列达到最大长度