搜索网络以寻找为我的spring项目创建数据库时不存在的解决方案,我在stackoverflow中找到了这个主题:
Simulate CREATE DATABASE IF NOT EXISTS for 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代码中运行此过程。我最初的想法是将此代码包含在此Service类中的String属性中:
@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;
}
}
但我发现这是无法做到的。任何人都有兴趣在这堂课内如何做到这一点?
答案 0 :(得分:2)
我建议您通过目前用于连接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)
(您还需要让存储过程将DB名称作为参数。)
修改强> 在回复下面的评论时,询问是否可以在不向数据库添加任何内容的情况下完成此操作,答案是肯定的:
您可以连接到template1
数据库,针对SELECT
运行pg_catalog
查询以查看数据库是否存在(如果不存在,您将获得空集) ,如果它不存在,则在与template1
db的连接上运行另一个查询以创建数据库。
基本上,它会将存储过程解构为其组成部分,并使用JDBC
或类似方法直接从Java调用它们。