以下代码在MySQL客户端内部运行,或通过管道传输到mysql。当我尝试在Java中作为查询运行它时 我收到错误
执行SQL语句时出错 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在#" delimiter @'
附近使用正确的语法
这是我遇到的第一个问题。我尝试用空格替换换行符,将其作为一行语句运行,除了Java之外,它在任何地方都可以使用。尝试没有DROP语句,同样的问题。
错误代码1064(解析错误),状态42000
感谢您提供的任何帮助。
DROP FUNCTION IF EXISTS escape_query_result;
delimiter @
CREATE FUNCTION escape_query_result(label CHAR(255))
RETURNS CHAR(255)
BEGIN
RETURN (REPLACE(REPLACE(REPLACE(label, "\\", "\\\\"), "|", "\\|"), "=", "\\="));
END@
delimiter ;
由于我无法发布答案,因此请修改我的问题:
找到我的答案。
http://bugs.mysql.com/bug.php?id=25019
您无法从查询中更改分隔符。在没有分隔符调用的情况下执行。
答案 0 :(得分:0)
我的猜测是,在你的MySQL连接字符串中,你需要将allowMultiQueries设置为true;否则,向MySQL发送一个将多个语句与分号组合在一起的查询是错误的。请参阅此处的文档:
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
allowMultiQueries的默认设置为false。
但是,出于安全原因,将其设置为false实际上很有用,因为大多数SQL注入攻击都是通过在查询中注入分号来实现的。如果allowMultiQueries为false,则这些注入将导致错误,而不是删除其中一个表中的所有行。在这种情况下,最好将DROP作为单独的查询发送。
然而,我不确定它是如何与MySQL中的DELIMITER命令交互的。也许其他人可以帮助你,因为我现在没时间测试它。