在美元引用的字符串查询中转义美元符号

问题描述

您好,我正在尝试处理具有数据类型文本解释字段的 Cassandra 查询。我正在使用 dollar-quoted strings 来转义特殊字符,但是当我的解释字段的字符串以美元符号结尾时我遇到了问题

例如

INSERT INTO Users (name,explanation) VALUES ($$Tom$$,$$Some'text$$$);

最后两个用美元引用的字符串是结束引号,但倒数第三个是解释的一部分,我怎么能逃避呢?或者有没有其他方法可以转义所有特殊字符,包括美元符号?

提前致谢

解决方法

查看 grammar,看起来词法分析器只是搜索直到 player.setOnPreparedListener(object: MediaPlayer.OnPreparedListener { override fun onPrepared(player:MediaPlayer) { player.start() } }) 的下一次出现,并且不区分双重和三重美元符号。但是如果您在 $$ 之后有任何字符,那么它只是被正确处理(例如,字符串 $ 工作得很好) - 它不应该是结束 $$dwewdewe'adqdq$'$$ 之前的最后一个字符。如果您想在其中插入带有 $$ 字符的字符串,您可以使用另一个 ' 字符对其进行转义(参见 doc)(例如;' - 它工作正常,并将按预期生成 'this is string with '' inside')。

这是一次插入语句。但是,如果您从程序中插入数据,那么最好改用 prepared statements - 所有现有驱动程序都应该支持它们。当您使用准备好的语句时,您不需要关心转义 - 这是驱动程序的工作(实际上,不会发生转义,因为字符串按原样发送,而不是作为语句的一部分)。并且除了不需要转义之外,您还应该获得更好的性能,因为语句的解析只发生一次,当它准备好时,然后只将语句 ID 加上参数发送到 Cassandra 节点。