java - 如何使用正则表达式作为过程中的参数通过java执行sql过程?

Posted

技术标签:

【中文标题】java - 如何使用正则表达式作为过程中的参数通过java执行sql过程?【英文标题】:How to perform sql procedure by java using regexp as parameter in procedure? 【发布时间】:2015-04-22 06:04:45 【问题描述】:

字段验证参数在我的 sql 数据库中默认具有 ^[A-Za-z\-.']*$ 值。

我有一个可以更改某些参数的存储过程。

我尝试使用^[A-Za-z0-9\-.']*$ 更新此参数。

我尝试使用CallableStatement 执行该过程。请看下面:

String newRegexValue = "^[A-Za-z0-9\-.']*$";
String parameterName = "ValidationParameter";
CallableStatement callableStatement = connection.prepareCall("exec UpdateProcedure '"+parameterName  +"', '"+ newRegexValue +"' ");
callableStatement .execute();

但我得到了 SQLServerException:

^附近的语法不正确

我尝试在^ 之前添加反斜杠,但错误仍然存​​在。

我想主要问题在于筛选newRegexValue

【问题讨论】:

您能在您的存储过程中显示T-SQL 语句吗? @Docteur,反斜杠 surraunds 正则表达式无济于事 @gotqn,抱歉,无法显示 您可能已经声明了一个范围,来自文字反斜杠和文字 .?我认为您需要检查正则表达式中的转义。尝试将未转义的连字符放在字符类的末尾。 @stribizhev,尝试但没有帮助 模式中的撇号怎么样?你能这样通过吗?它可能需要转义:\'。此符号也用作 SQL 命令中的值分隔符。 【参考方案1】:

问题在于单引号(撇号),因为它也在 SQL 命令中使用。您要么需要对其进行转义 (\'),要么 - 如果在某些 XML 中使用它 - 使用 ' 实体。

如果您不想在匹配项中允许使用撇号,只需将其从正则表达式中删除即可。

【讨论】:

我尝试删除 \' 并使用 "'^[A-Za-z0-9-. '' ]*$'" 更新我的值 - 参数已成功更新! 感谢大家的回答,尤其是 stribizhev! 我将 \' 替换为 ' - 控制台中出现“^ 附近的语法错误”错误。 很高兴它对你有用。如果我的回答对您有帮助,也请考虑投票(请参阅How to upvote on Stack Overflow?)。【参考方案2】:

你忘了逃避你的斜线。试试这个:

"^[A-Za-z0-9\\-.']*$"

【讨论】:

试过但得到 SQLServerException: Incorrect syntax near ^ 等一下。您是否尝试将, 替换为parameterNamevalue 之间的空格? See here.@user2837153 (或带有= 符号) 不,我的程序有 nex view dbo.UpdateProcedure(@parameterName varchar(50), @Value varchar(150))

以上是关于java - 如何使用正则表达式作为过程中的参数通过java执行sql过程?的主要内容,如果未能解决你的问题,请参考以下文章

php中的正则表达式

NLTK实现文本切分

聊一聊 Java 中的正则表达式

Jmeter 正则匹配

正则表达式快速通

如何将正则表达式参数传递给 PHP 中的 preg 替换回调?