gpt4 book ai didi

java - 如何在 Java 代码中从 Postgresql 调用存储过程

转载 作者:行者123 更新时间:2023-12-02 05:51:22 28 4
gpt4 key购买 nike

在网上搜索一个解决方案,以便在我的 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 代码运行这个过程。我最初的想法是将此代码作为 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 数据库,对 pg_catalog 运行 SELECT 查询以查看该数据库是否存在(您将得到一个如果不存在,则返回空),如果不存在,则在与 template1 数据库的连接上运行另一个查询以创建数据库。

基本上,它将存储过程解构为其组成部分,并使用 JDBC 或类似方法直接从 Java 调用它们。

关于java - 如何在 Java 代码中从 Postgresql 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23507119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com