通过java在sql脚本中传递参数

Posted

技术标签:

【中文标题】通过java在sql脚本中传递参数【英文标题】:Pass parameters in a sql script via java 【发布时间】:2015-05-12 06:59:18 【问题描述】:

我有一个需要一些外部参数的 sqlplus 脚本。这些参数应该来自 java 代码中存在的数组。我想将这些值传递给 sql 脚本,但不知道如何。请指导我。

我的sqlplus文件如下图

SET ECHO OFF 
SET HEADING OFF 
SET FEEDBACK OFF 
SET VERIFY OFF 
SET DEFINE ON 
SET TRIMSPOOL ON 
SET NEWPAGE NONE 
SET TERMOUT OFF
spool &3/&2..&1..fn
select text
  from dba_source
 where name = '&2'
   and type = 'FUNCTION'
   and owner = '&1'
 order by line
/
spool off
exit;

我用于在 unix 服务器中执行此文件的 java 代码如下所示。

try 
            String line;
            Process p = Runtime.getRuntime().exec(
                    "sqlplus -L user/pwd@SID @" + sqlFilePath);
            BufferedReader input = new BufferedReader(new InputStreamReader(
                    p.getInputStream()));
            while ((line = input.readLine()) != null) 
                System.out.println(line);
            
            input.close();
            p.destroy();
         catch (Exception err) 
            err.printStackTrace();
        

请指导我如何传递 java 代码中存在的字符串以在 unix 服务器中执行此 sqlplus 脚本。

编辑:我的解决方案

使用相同的查询创建了一个临时文件并替换了其中的参数。执行上述代码中的临时文件。

【问题讨论】:

您是否考虑过从 Java 生成脚本? 为什么要为此使用 Java?使用 Python 或 等解释型语言可能更容易,因为您使用的是 Unix,Bash 脚本。 而不是直接运行 sqlplus,我会运行一个调用 sqlplus 的 shell 脚本plus(这样我可以有可变的组织)或者更好,我会做一个存储过程。 实际上我有更大的要求,只能使用 java 来完成。这是我整个需求的一小部分。因此,我必须仅使用 java 执行此 sqlplus 脚本并从 java 传递参数。 @Drumnbass 谢谢你的建议。我创建了一个临时文件替换参数,它工作正常。 【参考方案1】:

尝试使用http://freemarker.org/ 之类的模板引擎。它非常通用,但应该不难使用。

【讨论】:

以上是关于通过java在sql脚本中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

在sql语句中,怎样将参数做为表名传递到查询语句中

将参数从 CMD 文件传递​​到 SQL 脚本

在准备语句中传递数组参数 - 获取“java.sql.SQLFeatureNotSupportedException”

shell脚本中执行mysql sql脚本文件并传递参数

怎样给lua脚本传递参数和脚本怎样接受这些参数

java调用shell脚本且传递参数