如何通过java使用regexp作为过程中的参数来执行sql过程?
默认情况下,字段验证参数在我的sql数据库中具有如何通过java使用regexp作为过程中的参数来执行sql过程?,java,sql-server,regex,stored-procedures,jdbc,Java,Sql Server,Regex,Stored Procedures,Jdbc,默认情况下,字段验证参数在我的sql数据库中具有^[A-Za-z\-.]*$值 我有一个存储过程,可以更改一些参数 我尝试使用^[A-Za-z0-9\-.]*$更新此参数 我尝试使用CallableStatement执行该过程。请参阅下文: String newRegexValue = "^[A-Za-z0-9\-.']*$"; String parameterName = "ValidationParameter"; CallableStatement callableStatement =
^[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
你忘了逃过刀口。试试这个:
"^[A-Za-z0-9\\-.']*$"
问题在于单引号(撇号),因为它也在SQL命令中使用。您要么需要对其进行转义(
\”
),要么——如果在某些XML中使用了它——使用&apos代码>实体
如果您不想在匹配中使用撇号,只需将其从正则表达式中删除。您可以在存储过程中显示T-SQL
语句吗?@Docteur,反斜杠和regexp没有帮助@gotqn,抱歉,无法显示您可能声明了一个范围,从一个文本反斜杠和一个文本
?我想你需要检查一下在正则表达式中逃跑的情况。试着在字符类的末尾加上不带换行符的连字符。@Stribizev,试过了,但没有帮助图案中的撇号怎么办?你能这样传吗?它可能需要转义:\'
。此符号还用作SQL命令中的值分隔符。已尝试但获得SQLServerException:^Wait.附近的语法不正确。。您是否尝试过用参数名称
和值
之间的空格替换,
@user2837153(或带有=
符号)不,我的过程具有nex视图dbo。UpdateProcedure(@parameterName-varchar(50),@Value-varchar(150))我试图删除\',并用“^[A-Za-z0-9-.']*$”更新了我的值-参数已成功更新!谢谢大家的回答,尤其是斯特里比雪夫!我将\'替换为'-控制台中出现“^附近语法不正确”错误。很高兴它对您有效。如果我的答案证明对你有用的话,请考虑一下投票。