从java运行sqlplus脚本的简单方法

Posted

技术标签:

【中文标题】从java运行sqlplus脚本的简单方法【英文标题】:Simple way to run sqlplus script from java 【发布时间】:2011-08-03 08:15:04 【问题描述】:

我有一个包含 sqlplus 特定脚本的 sql 文件:它包括 / 或 ;作为语句终止符,EXEC 执行存储过程等。

我需要从 java (jdbc) 执行这个脚本而不需要 sqlplus。

sql ant task / maven sql 插件无法处理不同的终止符或 EXEC 命令。

你知道不运行 sqlplus 的好方法吗?

【问题讨论】:

【参考方案1】:

我们遇到了同样的问题...简而言之,没有现成的解决方案:如果您打开 Ant 或 Maven 源,您会看到它们使用的是基于正则表达式的简单脚本拆分器适用于简单脚本,但通常会失败,例如存储过程。

确实有用于 PL/SQL 的 ANTLR 解析器,例如 Alexandre Porcelli's one——它们非常接近,但仍不能用作插入式解决方案。

我们最终编写了yet another ad hoc splitter,它知道/EXIT 等一些sqlplus 命令——它仍然很难看,但适用于我们的大多数脚本。

【讨论】:

为您的临时拆分器加油!【参考方案2】:

我可以想到两种选择。一个你不想要的 - 将它 Runtime.exec() 到 sqlplus。另一种是读取文件,删除行尾斜杠并在您点击分号时发送到 JDBC。或者在发生这种情况时添加到批处理中以减少对数据库的访问。

【讨论】:

这正是我想要做的,但我需要一个很好的类似 SQLPLUS 的解析器,它将整个文件分割成更小的部分。用 / 或 ; 简单分割字符不起作用

以上是关于从java运行sqlplus脚本的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

从终端检测脚本中键盘输入的最简单方法是啥?

如何通过在 java 中使用 Runtime.exec() 运行 sqlplus 来捕获 sqlplus 窗口的输出

简单的 sqlplus 脚本似乎不起作用

从 SQLPlus 运行 SQL 脚本失败时如何查看错误?

从 shell 脚本运行 sqlplus 时管理错误处理