gpt4 book ai didi

java - 使用 Java 运行时从 mysql 转储 sql 文件中检索表

转载 作者:行者123 更新时间:2023-12-02 01:21:22 25 4
gpt4 key购买 nike

我可以使用终端命令 sed 从 MySql Dump sql 文件成功检索表,但它不适用于 Java 运行时。

我可以使用以下终端命令成功从 mydump.sql 检索 mytable

 >sed -n -e '/DROP TABLE.*`cusprod`/,/UNLOCK TABLES/p' mydump.sql > 
>mytable.sql

但问题是我无法在我的 Java 程序中使用它。找到下面的代码。

 String[] executeCmd = new String[]{"sed", "-n", "-e", "'/DROP 
TABLE.*``mytable``/,/UNLOCK TABLES/p'", "/home/mydump.sql >
/home/mytable.sql"};
>Process runtimeProcess;
>runtimeProcess = Runtime.getRuntime().exec(executeCmd);

我希望获得 mytable.sql 文件。目前我从终端命令获取,但使用 Java 运行时我收到错误

sed: -e expression #1, char 1: unknown command: `''
Could not retrieve Table from Selected backup

最佳答案

与从终端输入命令不同,Runtime.exec(以及所有其他语言)会将您传递给它的所有参数作为原始值处理,并将它们直接传递给 sed 命令。因此,当您在数组中传递 "'/DROP TABLE.*``mytable``/,/UNLOCK TABLES/p'" 时,您正在传递

'/DROP TABLE.*``mytable``/,/UNLOCK TABLES/p'

作为 sed 的脚本,而不是

/DROP TABLE.*``mytable``/,/UNLOCK TABLES/p

请注意,脚本中没有引号。

您不需要在 Java 中引用脚本 --- 字符串本身将直接代表整个脚本。

你上次的论点也有类似的问题。使用 Runtime.exec 时,无法使用 > 重定向输出。您应该编写自己的代码来读取 sed Process 的输出并将其重定向到您想要的文件。

尝试以下操作:

Process process = Runtime.getRuntime().exec(new String[]{"sed", "-e", "/DROP TABLE.*`cusprod`/,/UNLOCK TABLES/p", "/home/mydump.sql"});
try (FileOutputStream outputStream = new FileOutputStream("/home/mytable.sql")) {
IOUtils.copy(process.getInputStream(), outputStream);
process.waitFor();
} catch (IOException | InterruptedException e) {
// Error handling
}

这将运行命令:

sed -e '/DROP TABLE.*`cusprod`/,/UNLOCK TABLES/p' '/home/mydump.sql'

并将输出写入文件/home/mytable.sql

IOUtils是 Apache 的一个实用程序类。

关于java - 使用 Java 运行时从 mysql 转储 sql 文件中检索表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622849/

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