• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用JdbcTemplate查询PostgreSQL的所有表

互联网 diligentman 2周前 (11-20) 7次浏览

使用JdbcTemplate查询PostgreSQL的所有表

    • 使用场景
    • Mysql如何查询呢
    • PostgreSQL如何执行
    • 最后根据tables是否为空来确定是否执行初始化数据操作吧

最近在开发中遇到了这样一个问题,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);
        }


喜欢 (0)