我正在尝试使用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
);
答案 0 :(得分:1)
我认为你没有以正确的方式使用ScriptUtils.readScript
。 javadocs本身状态:
主要供框架内部使用。
查看source code,似乎所有这个函数都会将文件中的所有行加载到单个字符串中,并在注释周围添加一些逻辑。在这种方法中使用分隔符很小,只有在它的末尾有一个空格时才会显示它。
如果您想忽略分隔符,则需要按照建议的方式将其删除(使用replace
)。