我试图创建一个jooq查询字符串以下方式
DSL.using(SQLDialect.MYSQL)
.select(
ImmutableList.of(DSL.field("Name"))
.from(DSL.table("Account"))
.where(DSL.field("Name").eq("Yaswanth's Company"))).toString()
结果查询字符串使用另一个单引号转义了单引号,这是默认的mySQL单引号转义方式。
"select Name from Account where Name = 'Yaswanth''s Company'"
但是我需要单引号用反斜杠转义,因为我正在为salesforce形成查询字符串。(称为SOQL)。
我需要这样的查询字符串
"select Name from Account where Name = 'Yaswanth\\'s Company'"
我已经看了jooq库代码,这是在Default绑定类中硬编码的
private final String escape(Object val, Context<?> context) {
String result = val.toString();
if (needsBackslashEscaping(context.configuration()))
result = result.replace("\\", "\\\\");
return result.replace("'", "''");
}
我有没有办法通过DSL可以传递的配置或设置来覆盖这种默认行为。使用(*,*)?
大多数SQL数据库都遵循将转义的单引号加倍的SQL标准,但是让这个功能可配置当然是有意义的。我们可能会为jOOQ 3.10和#5873这样做。
与此同时,最好的解决方法是为所有String类型编写自己的数据类型绑定,并在生成SQL字符串时重写DefaultBinding
行为。大致是这样的:
使用
<forcedType>
<userType>java.lang.String</userType>
<binding>com.example.AlternativeEscapingStringBinding</binding>
<!-- add other vendor-specific string type names here -->
<types>(?i:N?(VAR)?CHAR|TEXT|N?CLOB)</types>
</forcedType>
public class AlternativeEscapingStringBinding implements Binding<String, String> {
...
@Override
public void sql(BindingSQLContext<String> ctx) throws SQLException {
if (ctx.paramType() == ParamType.INLINED)
if (ctx.value() == null)
ctx.render().sql('null');
else
ctx.render()
.sql('\'')
.sql(ctx.value().replace("'", "\\'"))
.sql('\'');
else
ctx.render().sql('?');
}
}
您仍然可以手动将自己的数据类型绑定应用于字段,如下所示:
DSL.field("Name", SQLDataType.VARCHAR
.asConvertedDataType(new AlternativeEscapingStringBinding()));
你每次都要记住这一点。。。
我想构建一个cosmosdb sql查询,因为我使用的是rest接口,它接受sql查询(不要问为什么,我不能改变它:()... 你知道我有什么变通办法吗?或者可能只是一个很好的包,我可以用来转义我自己的字符串。 T
我可以将替换为其他一些字符序列(例如)来执行字符串替换,但是如果我可以用正则表达式来替换,这将更加清楚。
问题内容: 我想像这样在Bash中显示一个字符串 当然可以这样 但是如何在字符串周围使用单引号的同时完成此操作? 问题答案: 不起作用。但是以下工作原理: 在bash的手册页中: 即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。 .... $’string’* 形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C标准的规定替换反斜杠转义字符。 *
问题内容: 我不敢相信我在问这个,但是… 您如何使用SCALA在SPARK SQL中逃逸SQL查询字符串? 我已经厌倦了一切,到处搜寻。我以为apache commons库可以做到,但是没有运气: ”‘“).map(_.getValuesMapAny)).collect().foreach(println); 返回以下内容: topic =’‘’Ulmus_minor _’‘Toledo’‘’^在
我不敢相信我问这个但是... 如何使用Scala在SPARK SQL中转义SQL查询字符串? 我累了所有的东西,到处找。我以为apache commons库可以做到这一点,但运气不好: 返回以下内容: 帮个忙就好了。 j
问题内容: 这是我的绳子 此处,消息包含单引号,与JSON中使用的引号相同。我要做的是从用户输入(例如消息)中填充一个字符串。因此,我需要避免那些破坏代码的特殊情况。但是,除了字符串替换之外,还有什么方法可以使它们转义,但仍允许HTML将其处理回正确的消息? 问题答案: 根据规范,JSON字符串必须用双引号引起来,因此您无需逸出。 如果必须在JSON字符串中使用特殊字符,则可以使用characte