Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

使用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使用(案例)

下一篇: 自定义ElementUi的Timeline组件

精华推荐