当前位置: 首页 > 面试题库 >

使用CONTAINS查询的PreparedStatement

能烨华
2023-03-14
问题内容

我有一个查询,该查询将需要连续运行28000次,因此我认为使用prepareStatement可能是一个聪明的主意。

这是我的查询:

String requestWithFirstName = "SELECT SE.ELEMENT_ID, SE.LASTNAME||' '||SE.FIRSTNAME AS ELEMENT, (SCORE(1)+SCORE(2))/2 AS SCORE "
                        + "FROM BL_SUSPICIOUS_ELEMENT SE "
                        + "WHERE CONTAINS(SE.LASTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 1)>0 "
                        + "AND CONTAINS(SE.FIRSTNAME,  'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 2)>0 "
                        + (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?" : "") 
                        + " ORDER BY SCORE DESC";

一切工作都很好,直到我们意识到模糊方法对像“皮卡丘是我的英雄”之类的分裂单词效果不佳,建议在这种情况下创建4个模糊搜索“皮卡丘”,“是”,“我”,“英雄’。不知道这是否是正确的,但是由于我将运行查询28
000次,因此这是一个很好的机会来查看它的运行情况。

所以我试图以这种方式修改查询:

 "SELECT A.ELEMENT_ID, A.LASTNAME||' '||A.FIRSTNAME AS AKA, SCORE(1) AS SCORE "
        + "FROM BL_AKA A, BL_SUSPICIOUS_ELEMENT SE " 
        + "WHERE CONTAINS(A.LASTNAME, ?, 1)>0 " 
        + "AND SE.ELEMENT_ID = A.ELEMENT_ID "
        + (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?": "") 
        + " ORDER BY SCORE DESC";

在这种情况下, ?将设置为:

‘fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)’

该查询似乎很好,在sql dev上运行。但是,使用Java时,出现以下错误:

ORA-20000:Oracle Text的错误:DRG-50900:文本第1行查询解析器错误,柱30
DRG-50920:短语本身不是一个短语或等价的部分
在第1行的文本查询解析器误差,列30:DRG-50900
DRG -50920:词组的一部分本身不是词组或对等物

有什么建议吗?我想知道这是否与in语句相同(不可能从pokemon中创建一个select *,其中(?)中的怪物)

谢谢 !


问题答案:

在Java中使用预处理语句时,它将根据您使用的方法设置参数。所以

String s = "'fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)'";
statement.setString(s);

将再次被转义并导致:

'''fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)'''

尝试设置不带引号的参数

您可以创建一个IN (?)语句。但是您将必须为每个参数添加一个问号:WHERE monster IN (?,?,?,?,?,?)



 类似资料:
  • 我正在Flask中构建一个web应用程序,它涉及到一些SQLAlchemy。我有一个函数“get_team()”让我发疯。 我一直得到的错误:"属性错误:'Unicode'对象没有属性'_sa_instance_state'"。以下是模型的样子: 任何方向都将不胜感激!

  • 我有一个搜索查询,它必须使用包含搜索搜索表中的一列。列上有CTXSYS.Context类型索引。当使用prepared语句在表中获取数据时,搜索查询不能处理像-、/、_等特殊字符。

  • 我尝试获取标题中包含一些单词的链接,但不包含一些单词,我使用以下代码,但它表示这不是有效的XPath表达式。 请在此处找到我的代码: 任何帮助将不胜感激!

  • 我有以下 sql 变量: 我配置了一个名为@p1的SQL参数和一个有效的字符串,即“foo”,并使用以下内容将其添加到SqlParameterCollection集合变量中: 然后调用以下查询。 我得到以下错误: 留言:微软。azure . documents . documents client exception:Message:{ " errors ":[{ " severity ":" E

  • 我尝试这样做查询: 但它返回: “Status”:400,“DisplayName”:“BadRequest”,“Message”:“SearchPhaseExecutionException[未能执行阶段[query],所有碎片失败;shardFailures{[PzLsLPHfTMu68AQ94_Af8g][gyms][0]:SearchParseException[[gyms][0]:Fro

  • 我一直在为selenium Xpath定位器使用Contains函数。到目前为止,这个功能一直有效。它目前不适用于表中的TD元素。我正在向函数发送正确的文本,所以我不明白为什么。 在Chrome上,转到此处:https://rcpsc.releasecandidate-community360qa.net/login.aspx?action=enablelogin 登录:mj4/test 向下滚动