使用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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/225425.html
標籤:其他
