【问题标题】:Correct PreparedStatement for SQL MATCH with unknown value为具有未知值的 SQL MATCH 更正 PreparedStatement
【发布时间】:2013-01-12 10:48:38
【问题描述】:
String sqlStm = "SELECT * FROM TableName WHERE TableName MATCH '?'";
               pst.setString(1, keyword.getText());

我正在对我的数据库进行全文搜索。当我使用上面的它不执行 sql 语句。但是,如果我要更改程序并给出一个匹配的值......

  String sqlStm = "SELECT * FROM TableName WHERE TableName MATCH 'technology'";

程序执行。但我希望搜索基于keywordJTextfield 中输入的文本。第一行的格式是否正确。 MATCH 是否支持 pst.setString()。正确的说法应该是什么。

【问题讨论】:

    标签: java sql sqlite


    【解决方案1】:

    去掉参数两边的单引号,它会将参数转换成一个值。参数 placeolder ? 不应用单引号括起来。

    String sqlStm = "SELECT * FROM TableName WHERE TableName MATCH ?";
    pst.setString(1, keyword.getText());
    

    【讨论】:

    • 这失败了,我正在使用 Sqlite
    • 不,不是事件那个或 `%?%, 或 MATCH = ?, 或 TableName = ? ...糟透了。
    • 你能逃脱吗?像 \?
    • @SalehOmar 转义字符是非法的兄弟
    • 我认为你应该逃脱两次 \\?但我不确定
    【解决方案2】:

    这个怎么样?

    SELECT * FROM TableName WHERE TableName  LIKE '%^technology$%'
    

    SELECT * FROM TableName WHERE TableName REGEXP '^\\technology$'
    

    我真的找不到任何文章说 SQlite Likeregexp 的行为与 MySQL 不同,所以......你可以试试看。如果有什么不同,也请分享。

    【讨论】:

    • 需要反映未知的价值,而不是固定的“技术”。问题在于使用?连同pst.setString()
    • 仅处理未知查询表达式,未定义。你错过了问题的重点
    • @MuminAli 对不起,伙计,这真是一个错过。也许试试function 然后..
    猜你喜欢
    • 2021-09-23
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多