SQL 引号中的问号在PrepareStatement 中不被看作是占位符

  SQL 引号中的问号在PrepareStatement 中不被看作是占位符。

  如:SELECT P.NAME, S.YEAR, S.QUANTITY FROM SALES S LEFT JOIN PRODUCT P ON S.PRODUCT_ID = P.ID WHERE P.NAME LIKE '%?%'

  会报java.sql.SQLException: 无效的列索引。

  可以用字符串拼接的方式处理,拼接可以是在SQL 上,也可以是在传参的时候处理。

  即

    一、SQL 改写为SELECT P.NAME, S.YEAR, S.QUANTITY FROM SALES S LEFT JOIN PRODUCT P ON S.PRODUCT_ID = P.ID WHERE P.NAME LIKE '%' || ? || '%'  (这是oracle 的写法)

    二、SQL 改写为SELECT P.NAME, S.YEAR, S.QUANTITY FROM SALES S LEFT JOIN PRODUCT P ON S.PRODUCT_ID = P.ID WHERE P.NAME LIKE ?

      传参时prepareStatement.setString(theIndex, "%" + param + "%");

原文地址:https://www.cnblogs.com/phoenix-smile/p/7442762.html