使用JdbcTemplate查询PostgreSQL的所有表
日期: 2020-11-19 分类: 跨站数据 390次阅读
使用JdbcTemplate查询PostgreSQL的所有表
最近在开发中遇到了这样一个问题,postgresql数据库大家都很熟悉,在命令行中我们可以使用\dt来列出所有表,那么在Java中用JdbcTemplate可以执行\dt命令吗?答案是不可以,本人在项目启动时执行查询表格列表,然后根据是否存在表格来初始化数据库,但是\dt命令无法执行,真的是我孤陋寡闻了,所以度娘一下,找出答案。
使用场景
项目部署后,启动项目时检查数据库是否存在,然后自动初始化数据库;
Mysql如何查询呢
List<Map<String, Object>> tables = jdbcTemplate.queryForList("show tables");
PostgreSQL如何执行
# 错误方式
List<Map<String, Object>> tables = jdbcTemplate.queryForList("\\dt");
# 正确方式
# PostgreSQL默认的schema是public,如果查询指定schema则添加where schema='dsmp'
List<Map<String, Object>> tables = jdbcTemplate.queryForList("select tablename from pg_tables where schemaname='dsmp'");
最后根据tables是否为空来确定是否执行初始化数据操作吧
if (tables.size() > 0) {
return;
}
try {
log.info("Database will be initialized...");
final Resource resource = new ClassPathResource("script/init.sql");
ScriptUtils.executeSqlScript(Objects.requireNonNull(this.jdbcTemplate.getDataSource()).getConnection(), new EncodedResource(resource, "UTF-8"));
log.info("Database is initialized ok.");
} catch (final SQLException e) {
FixturesBySql.log.error("Database is initialized failed。", e);
}
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: Java之Lambda使用(案例)
精华推荐