如何在 Java 中执行具有 PostgreSQL 特定功能的 sql 脚本

问题描述 投票:0回答:1

我有一个项目,其中包含大量创建数据库的

.sql
文件。当我们加入新员工或添加新客户时,我们会使用它。 sql 文件使用 PostgreSQL \i 命令相互调用,因此我们通常只需调用
psql
命令来运行
startup.sql
文件,它就会运行其余的所有操作。

我需要从 java 程序调用

startup.sql
文件。

我尝试使用 JDBC,但它不接受

\
字符,因此当它到达
\i
时无法执行。我以为使用 PgConnection 扩展可以让我绕过 JDBC 的限制,但它仍然失败。

PgConnection connection = (PgConnection) DriverManager.getConnection(connectionString, username, password);
connection.createStatement().execute("\\i ./db_init/startup.sql"); // fails on syntax error at or near "\"
connection.execSQLQuery("\\i ./db_init/startup.sql"); // fails on syntax error at or near "\"

我还研究过使用

Process
来运行
psql
命令行工具,但它挂起。我认为因为它请求用户的密码,但该提示没有传递回运行 java 程序的终端,所以无法输入密码。也许我可以弄清楚如何连接输入和输出,但当我研究它时,这似乎相当复杂。无论如何,我更愿意直接连接到数据库,而不是让 java 执行外部程序。

java postgresql jdbc
1个回答
0
投票

我想要做的具体事情是不可能的,因为正如@AdrianKlaver评论的那样,

\i
不是postgres服务器命令,而是专门用于
psql
命令行工具的命令。因此,我要么必须自己解析并运行每个命令,递归加载
\i
引用的文件,要么找到一种方法来运行
psql
工具并为其提供密码。

© www.soinside.com 2019 - 2024. All rights reserved.