在网上搜索为我的春季项目创建数据库的解决方案,当它不存在时,我在stackoverflow中找到了这个主题:
模拟创建数据库如果不存在的PostgreSQL?
和这个存储过程来完成:
DO
$do$
BEGIN
IF EXISTS (SELECT 1 FROM pg_database WHERE datname = 'mydb') THEN
RAISE NOTICE 'Database already exists';
ELSE
PERFORM dblink_exec('dbname=' || current_database() -- current db
, $$CREATE DATABASE mydb$$);
END IF;
END
$do$
我想从我的Java代码运行这个过程。我最初的想法是将这段代码作为String属性包含在这个Service类中:
@Service
public class InstallService {
private String query = "";
public boolean create_database(String maquina, String usuario, String senha) {
return false;
}
public boolean create_user(String usuario, String senha, String email) {
return false;
}
}
但我刚刚发现这是不可能的。有人能告诉我在课堂上怎么做吗?
我建议您通过当前用于从Spring连接Postgres的任何方法调用存储过程。(即Spring JDBC: http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html;或者MyBatis等)
您可以在template
数据库中定义存储过程,然后通过Spring JDBC或您使用的任何方法连接到它,查询形式为:
SELECT stored_proc_name(dbname)
(您还需要让存储过程将数据库名称作为参数。)
编辑:在下面的评论中,询问是否可以在不向数据库添加任何内容的情况下完成此操作,答案是肯定的:
您可以连接到template1
DB,对pg_catalog
运行SELECT
查询,看看DB是否存在(如果不存在,您将得到一个空集),如果它不存在,在连接到template1
DB上运行另一个查询来创建DB。
基本上,它将把存储过程分解为其组成部分,并使用JDBC
或类似的方法直接从Java调用它们。