如何使用 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 检查表列是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QueryExpression::addCase() 中使用表列而不是变量