[英]How call a stored procedure from Postgresql in the Java code
在网上搜索一个解决方案来为我的 spring 项目创建一个数据库,当它不存在时,我在 stackoverflow 中找到了这个主题:
为 PostgreSQL 模拟 CREATE DATABASE IF NOT EXISTS?
用这个存储过程来完成:
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
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)
(您还需要让存储过程将 DB 名称作为参数。)
编辑:针对下面的评论,询问是否可以在不向数据库添加任何内容的情况下完成此操作,答案是肯定的:
您可以连接到template1
数据库,针对pg_catalog
运行SELECT
查询以查看该数据库是否存在(如果不存在,您将获得一个空集),如果不存在,则在连接上运行另一个查询到template1
db 以创建数据库。
基本上,它将存储过程解构为其组成部分,并使用JDBC
或类似方法直接从 Java 调用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.