【问题标题】:Anorm LIKE clause with String Interpolation带有字符串插值的异常 LIKE 子句
【发布时间】:2014-09-28 13:03:10
【问题描述】:

是否可以在 Anorm 中使用带有字符串插值的 LIKE 子句?

// e.g. this doesn't work
SQL"SELECT * FROM users WHERE last_name LIKE $lastName%".as(userParser.*)

更新: 我需要选择姓氏以给定字母开头的所有用户的 SQL 语句,例如:

SELECT * FROM users WHERE last_name LIKE 'Smi%';

【问题讨论】:

    标签: scala anorm


    【解决方案1】:

    如果预期的 WHERE 子句类似于 WHERE last_name LIKE '%pattern%',则必须在将其作为参数传递之前准备字符串。

    SQL"""SELECT * FROM users WHERE last_name LIKE ${"%"+lastName+"%"}""".
      as(userParser.*)
    

    【讨论】:

    • SQL 注入呢?如果 lastName 设置为单引号怎么办?会添加一个单引号还是添加两个单引号?
    • 异常插值,与使用SQL(...)+标准字符串插值相反,与使用.on("param" -> paramVal)完全一样,即作为JDBC参数传递值,没有SQL注入风险。
    • JDBC 占位符是 ?: docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html 这个“%”字符是怎么用的?是异常还是 jdbc 解释这个字符?有网页解释吗?
    • % 在参数值内(在字符串内),不被 Anorm 或 JDBC 以任何方式解释,只是传递给数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多