SQL 引號中的問號在PrepareStatement 中不被看做是佔位符。java
如:SELECT P.NAME, S.YEAR, S.QUANTITY FROM SALES S LEFT JOIN PRODUCT P ON S.PRODUCT_ID = P.ID WHERE P.NAME LIKE '%?%'sql
會報java.sql.SQLException: 無效的列索引。oracle
能夠用字符串拼接的方式處理,拼接能夠是在SQL 上,也能夠是在傳參的時候處理。索引
即字符串
1、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 的寫法)io
2、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 + "%");