ScriptUtils.readScript() 与 DEFAULT_STATEMENT_SEPARATOR 不工作
ScriptUtils.readScript() with DEFAULT_STATEMENT_SEPARATOR is not working
我正在尝试使用 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
);
我认为您 ScriptUtils.readScript
的使用方式不正确。 javadocs 自己声明:
Mainly for internal use within the framework.
查看 source code,似乎这个函数所做的只是将文件中的所有行加载到单个字符串中,并带有一些围绕注释的逻辑。此方法中分隔符的使用很少,只有在分隔符末尾有空格时才有意义。
如果您想忽略分隔符,则需要按照您建议的方式将其删除(使用 replace
)。
我正在尝试使用 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
);
我认为您 ScriptUtils.readScript
的使用方式不正确。 javadocs 自己声明:
Mainly for internal use within the framework.
查看 source code,似乎这个函数所做的只是将文件中的所有行加载到单个字符串中,并带有一些围绕注释的逻辑。此方法中分隔符的使用很少,只有在分隔符末尾有空格时才有意义。
如果您想忽略分隔符,则需要按照您建议的方式将其删除(使用 replace
)。