带有DEFAULT_STATEMENT_SEPARATOR的ScriptUtils.readScript()无效

时间:2015-11-09 05:42:11

标签: spring jdbc spring-jdbc

我正在尝试使用ScriptUtils.readScript方法从文件执行sql脚本:

sql = ScriptUtils.readScript(fileReader,
                            ScriptUtils.DEFAULT_COMMENT_PREFIX,
                            ScriptUtils.DEFAULT_STATEMENT_SEPARATOR);

getJdbcTemplate().update(sql);

但我收到错误 org.springframework.jdbc.BadSqlGrammarException:StatementCallback;坏SQL语法,从日志中我看到sql语句中的分号*不会被忽略,即使我使用ScriptUtils.DEFAULT_STATEMENT_SEPARATOR为什么它不起作用?这有什么不对?

编辑:我知道我可以使用以下方法解决此问题:

getJdbcTemplate().update(sql.replace(";", ""));

但也许有另一种解决方案?

Edit2 :以下是我需要执行的sql示例:

INSERT
INTO MYTABLE
  (
    ID,
    MYNUMBER,
    MYVALUE
  )
 SELECT 
  ID,
  0,
  B.MYVALUE
 FROM ATABLE A,
  BTABLE B
  WHERE A.ID   = B.ID
 AND NOT EXISTS
  (SELECT 1 FROM MYTABLE M WHERE M.ID = A.ID
  );

1 个答案:

答案 0 :(得分:1)

我认为你没有以正确的方式使用ScriptUtils.readScriptjavadocs本身状态:

  

主要供框架内部使用。

查看source code,似乎所有这个函数都会将文件中的所有行加载到单个字符串中,并在注释周围添加一些逻辑。在这种方法中使用分隔符很小,只有在它的末尾有一个空格时才会显示它。

如果您想忽略分隔符,则需要按照建议的方式将其删除(使用replace)。