MySQL 數(shù)據(jù)庫 like 語句通配符模糊查詢小結(jié)
MySQL 報(bào)錯(cuò):Parameter index out of range (1 > number of parameters, which is 0)——MySQL 數(shù)據(jù)庫 like 語句通配符模糊查詢小結(jié)
前言 今天在使用MySQL語句執(zhí)行增刪改查操作時(shí),控制臺(tái)報(bào)出了以下錯(cuò)誤:Parameter index out of range (1 > number of parameters, which is 0)。翻譯過來意思就是:查到結(jié)果數(shù)據(jù)為1,真實(shí)值應(yīng)為0,參數(shù)越界,產(chǎn)生錯(cuò)誤。如此也就明確了我們具體出錯(cuò)的地方——參數(shù),即對(duì)于通配符"?"的處理。本文分別對(duì)執(zhí)行普通 SQL 語句以及使用 like 語句進(jìn)行通配符模糊查詢遇到本錯(cuò)誤進(jìn)行了剖析,并給出解決方案。

一、分析 SQL 語句
1、普通 SQL 語句的查詢分析
首先,我們來分析一下我之前使用的 SQL 語句:
String sql = "select count(*) from tab_route where cid = ?";
說明:我們直接使用通配符"?"來代替參數(shù),使用 Spring 框架的 JdbcTemplate 執(zhí)行增刪改查操作。在這里是沒有任何問題的。
2、普通 SQL 查詢語句如何處理
如果在這里出錯(cuò),請(qǐng)按照如下方式進(jìn)行解決:
檢查通配符"?"的格式,注意是在英文輸入法下輸入,非中文問號(hào);檢查 SQL 語句,使用通配符傳遞的參數(shù)是不加引號(hào)的,比如下面的就是錯(cuò)誤的:
String sql = "select count(*) from tab_route where cid = '?'";
3、使用 like 通配符模糊查詢語句分析
同理,我們依舊采用上面的方式進(jìn)行模糊查詢操作,來看一下出錯(cuò)的 SQL 語句:
String sql = "select count(*) from tab_route where rname like '%?%';
執(zhí)行結(jié)果報(bào)錯(cuò):Parameter index out of range (1 > number of parameters, which is 0)。
結(jié)果分析:查到結(jié)果數(shù)據(jù)為1,真實(shí)值應(yīng)為0,參數(shù)越界,產(chǎn)生錯(cuò)誤。
我們明確如下語句是沒有任何問題的:
String sql = select * from tab_route where rname like '%張%';
如此也就明確了我們具體出錯(cuò)的地方——參數(shù),即對(duì)于 like 語句中通配符"?"的處理。
二、like 語句使用通配符模糊查詢剖析
1、like 語句的應(yīng)用場景
使用 like 通配符進(jìn)行模糊查詢是我們?cè)陧?xiàng)目中常遇到的,比如在搜索框中對(duì)于數(shù)據(jù)的模糊查詢。
2、模糊查詢剖析
在 SQL 語句中無法直接對(duì)'%?%'進(jìn)行解析,所以我們需要對(duì)連接的字符串進(jìn)行處理,使用動(dòng)態(tài)拼接concat()方法將'%?%'中的內(nèi)容進(jìn)行連接,然后再執(zhí)行增刪改查操作。
concat(str1,str2,str3...)會(huì)生成一個(gè)新的字符串
3、正確語句
String sql = "select count(*) from tab_route where rname like concat('%',?,'%')";
三、MyBatis like 模糊查詢及關(guān)鍵字區(qū)分
在 MyBatis 中使用 like 模糊查詢,應(yīng)注意關(guān)鍵字為:#{str},查詢子句為:
select * from table where name like concat('%',#{name},'%');
而如果添加排序字段,應(yīng)注意關(guān)鍵字為:${str},查詢子句為:
select * from table where name like concat('%',#{name},'%') order by ${id};
總結(jié) 本文分別對(duì)執(zhí)行普通 SQL 語句以及使用 like 語句進(jìn)行通配符模糊查詢遇到錯(cuò)誤進(jìn)行了剖析,并給出相應(yīng)解決方案。同時(shí)補(bǔ)充了在 MyBatis 中對(duì)模糊查詢的操作以及不同關(guān)鍵字的區(qū)分。代碼之路漫漫,望諸君細(xì)致。

到此這篇關(guān)于MySQL 數(shù)據(jù)庫 like 語句通配符模糊查詢小結(jié)的文章就介紹到這了,更多相關(guān)MySQL 模糊查詢like內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)
本文主要介紹了MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
MySQL操作數(shù)據(jù)庫實(shí)戰(zhàn)指南
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫操作庫的相關(guān)資料,MySQL數(shù)據(jù)庫是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),所采用的SQL語言是用于訪問數(shù)據(jù)庫最常用的標(biāo)準(zhǔn)會(huì)語言,需要的朋友可以參考下2023-07-07
MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例
所謂聯(lián)合就是把多個(gè)表的記錄往一起合并,一起進(jìn)行查詢,也叫多表查詢,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下2024-01-01
MYSQL定時(shí)清除備份數(shù)據(jù)的具體操作
這篇文章主要給大家介紹了關(guān)于MYSQL定時(shí)清除備份數(shù)據(jù)的具體操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MYSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
mysql實(shí)現(xiàn)connect by start with方式
本文介紹了MySQL中實(shí)現(xiàn)層級(jí)查詢的幾種方法,并分享了一種使用變量循環(huán)賦值的方式,通過實(shí)驗(yàn)驗(yàn)證了該方法的有效性2024-12-12
mysql中l(wèi)ike % %模糊查詢的實(shí)現(xiàn)
這篇文章主要介紹了mysql中l(wèi)ike % %模糊查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
MySQL數(shù)據(jù)備份之mysqldump的使用方法
mysqldump常用于MySQL數(shù)據(jù)庫邏輯備份,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)備份之mysqldump使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11

