[問題] QT Sqlite語法以及全文檢索FTS問題

作者: liu2007 (è–¯)   2021-11-19 16:36:24
我的開發平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
在寫一些存取Sqlite資料庫的程式碰到了兩個問題。
1.當要查詢的字當中包含sql語法保留字的時候:
QString keyword;
QString queryString{"SELECT * FROM exfts WHERE nameEN match ?"};
query.prepare(queryString);
query.addBindValue(keyword);
當keyword是sql語法的保留字,例如:AND, OR等等,querry會失敗
想請問QT有相對應函式可以解決嗎?
還是只能自己判斷如果要搜的關鍵字是保留字的時候
querryString要自己變成
QString queryString{"SELECT * FROM exfts WHERE nameEN match " +
"'"+ keyword +"';"};
2.第二個問題就是在使用全文檢索FTS的時候
match + 萬用字元* 跟
一般普通的sql語法 like + 萬用字元%
兩者似乎有什麼不一樣
如果我想要找有包含「水果」兩個字的欄位
使用 like '%水果%'搜尋
那不管是
1.好吃的水果
2.好吃 水果真的很好吃
3.好吃 水果 真的很好吃
3.好吃-水果-真的很好吃
都可以撈出來
但如果是match '水果'
只有3會被撈出來
如果使用match '*水果*'
有時候可以被撈出來
也有可能不會被撈出來
因為這是之前碰到的問題現在才來問
所以當時的資料庫資料以及下的關鍵字我一時舉例不上來
我下班之後如果有找到例子會再補上
目前只確定使用match '關鍵字'的時候
兩旁有用空白切開來的欄位才會被撈出來,例如上述的3
其他包含在一句沒斷開的句子裡則不會撈出來
用萬用字元擺前或擺後也沒有正確撈出
想請問是我完全搞錯FTS的萬用字元*的用法
還是是因為非英語的文字分割字詞的關係?
又或是其他原因呢?
感謝閱讀

Links booklink

Contact Us: admin [ a t ] ucptt.com