gpt4 book ai didi

java - 从 Java 内部执行查询以创建函数

转载 作者:行者123 更新时间:2023-11-30 23:34:07 24 4
gpt4 key购买 nike

以下代码在 MySQL 客户端中运行查找,或通过管道传输到 mysql。当我尝试在 Java 中将其作为查询运行时我得到一个错误

Error executing SQL statement com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter @'

这是我遇到的第一个查询。我尝试用空格替换换行符以将其作为一行语句运行,除 Java 外,它在任何地方都有效。在没有 DROP 语句的情况下尝试过,同样的问题。

Error Code 1064 (Parse Error), State 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

您不能更改查询中的分隔符。在没有定界符的情况下执行调用有效。

最佳答案

我的猜测是,在您的 MySQL 连接字符串中,您需要将 allowMultiQueries 设置为 true;否则,向 MySQL 发送以分号组合多个语句的查询是错误的。请参阅此处的文档:

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

allowMultiQueries 的默认设置为 false。

但是,出于安全原因,将此设置为 false 实际上很有用,因为大多数 SQL 注入(inject)攻击都是通过在查询中注入(inject)分号来进行的;如果 allowMultiQueries 为假,那么这些注入(inject)将导致错误,而不是删除您的一个表中的所有行。在这种情况下,最好将 DROP 作为单独的查询发送。

不过,我不确定这如何与 MySQL 中的 DELIMITER 命令交互。也许其他人可以帮助您,因为我现在没有时间对其进行测试。

关于java - 从 Java 内部执行查询以创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com