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

时间:2015-05-12 06:59:19

标签: java sqlplus

我有一个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脚本。

编辑:我的解决方案

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

1 个答案:

答案 0 :(得分:0)

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