国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDBC之PreparedStatement模糊查詢

2019-11-14 15:18:06
字體:
來源:轉載
供稿:網友

今天要做一個關于模糊查詢的需求,以前用JDBC做精確查詢都是用 "SELECT * FROM test WHERE id = ?",所以用模糊查詢時理所當然的也用了"SELECT * FROM test WHERE name = '%?%'",但是查詢時一直提示java.sql.SQLException: Invalid parameter index 1.

Google一下原來ps不支持上面的寫法,應該先用占位符表示 "SELECT * FROM test WHERE name = ?",然后在傳參數的時候拼接ps.setString(1, "%"+參數+"%");

為了弄明白為什么PS不支持上面錯誤的表達方式,特意查看了一下源碼(基于Jtds驅動,如下為簡略代碼),原來PS再解析SQL語句時,是先判斷是否有 [ " ' 符號,如果有則把后面的字段都當做字符串處理,而后才判斷占位符。

String[] parse(boolean extractTable) throws SQLException {
  switch
(c) { case '{': escape(); isModified = true; break; case '[': case '"': case '/'': copyString(); break; case '?': copyParam(null, d); break; case '/': if (s+1 < len && in[s+1] == '*') { skipMultiComments(); } else { out[d++] = c; s++; } break; case '-': if (s+1 < len && in[s+1] == '-') { skipSingleComments(); } else { out[d++] = c; s++; } break; default: if (isSlowScan && Character.isLetter(c)) { if (keyWord == null) { keyWord = copyKeyWord(); if ("select".equals(keyWord)) { isSelect = true; } isSlowScan = extractTable && isSelect; break; } if (extractTable && isSelect) { String sqlWord = copyKeyWord(); if ("from".equals(sqlWord)) { // Ensure only first 'from' is PRocessed isSlowScan = false; tableName = getTableName(); } break; } } out[d++] = c; s++; break; }
}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延寿县| 博客| 武陟县| 精河县| 芜湖市| 牙克石市| 延边| 偏关县| 会泽县| 平凉市| 呼伦贝尔市| 长治市| 霸州市| 永清县| 汽车| 琼结县| 治多县| 丹棱县| 阜阳市| 丰宁| 加查县| 德阳市| 邹平县| 丰台区| 大同县| 耒阳市| 临洮县| 文山县| 简阳市| 教育| 大庆市| 福清市| 许昌县| 淮滨县| 巢湖市| 会东县| 克拉玛依市| 武强县| 洞头县| 峡江县| 恩平市|