当前位置: 首页 > 知识库问答 >
问题:

如何在@@postgres运算符的单引号内进行参数替换

马弘益
2023-03-14

我对把两种不同的东西结合在一起有意见。我尝试了很多关于SO的建议,但没有任何效果,因此我发布了我的问题。

所以要求是

  1. 我需要在Java中构建动态查询(用于搜索jsonb列类型)
  2. 我需要使用准备好的Java语句(避免sql注入)
  3. 我需要替换单引号内的参数

CLI中的这个查询非常有效

select * from items where cnt @@ '$.**.text like_regex "#finance" flag "i"';                                                                    

我想参数化的部分是“金融”。所以当我构建这个查询时

select * from items where cnt @@ '$.**.text like_regex ? flag "i"';                                                                    

执行时,我得到以下错误

"The column index is out of range: 1, number of columns: 0." 

是因为?在单引号内,所以jdbc驱动程序可能无法识别为可替换参数。

我能找到的最接近的问题/讨论是在这篇文章中:json中的JDBC准备语句参数。

我已经尝试过了,但是由于某种原因,这对我不起作用。他们查询现在我运行的是

select * from items where cnt @@ ?::jsonb 

但有了这个,我得到了以下错误

org.postgresql.util.PSQLException: ERROR: operator does not exist: jsonb @@ jsonb
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
  Position: 106

我已经尝试了各种其他方法,如转义单引号等,但没有真正奏效。我对PostgreSQL的了解非常有限,所以任何帮助都将不胜感激。

Postgres版本:13.1
Java版本:15

共有1个答案

仉臻
2023-03-14

从cnt@@?::jsonb的项目中选择*

@右边的东西应该是jsonpath,而不是jsonb。因此,把它交给jsonb显然是错误的。尝试将其转换为jsonpath。

 类似资料:
  • 问题内容: 如何使用PHP 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配

  • 我可以将替换为其他一些字符序列(例如)来执行字符串替换,但是如果我可以用正则表达式来替换,这将更加清楚。

  • 我与 PhpStorm 一起开发。 对于 TypeScript 项目,我喜欢键入模块名称时的“自动导入”功能。 但是当我想加载(例如)NgbModule时,我有下面的自动导入: 如何配置Php斯托使用单引号括号而不是双引号?像这样:

  • 对于PHP中的自定义脚本解析器,我想替换包含双引号和单引号的多行字符串中的一些单词。但是,只能替换引号之外的文本。 例如,我想把“苹果”换成“梨”,但只在引用句子之外。所以在这种情况下,只有“许多苹果从树上掉下来”里面的“苹果”才是目标。 以上将给出以下输出: 我怎样才能做到这一点?

  • 问题内容: 我有这行工作正常: 但是我想使用SQLite参数替换而不是字符串替换(因为我在这里看到这更安全)。 这是我的(失败)尝试: 但是此行返回: ‘提供的装订数量不正确。当前语句使用0,并且提供了1。 因此,我声明的左部分无效。我正在提供一个绑定(名称,以t表示),但似乎没有解析问号(?)。如果删除围绕?的引号,则可以使用。但是我希望这些报价保持不变,因为我记得在某些情况下需要使用这些报价。

  • 问题内容: 以下是一个名为AT5G60410.gff的大文件的示例: 我在使用grep从中提取特定行时遇到了一些麻烦。我想提取所有在第三列中指定的“基因”或“外显子”类型的行。当这不起作用时,我感到很惊讶: 没有结果返回。我哪里出问题了? 问题答案: 您需要逃脱。以下应做的工作。