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 ^ 等一下。您是否尝试将,
替换为parameterName
和value
之间的空格? See here.@user2837153
(或带有=
符号)
不,我的程序有 nex view dbo.UpdateProcedure(@parameterName varchar(50), @Value varchar(150))以上是关于java - 如何使用正则表达式作为过程中的参数通过java执行sql过程?的主要内容,如果未能解决你的问题,请参考以下文章