Android 如何在SQLite中查找包含分号(;)符号的值?
我正在用分号(Android 如何在SQLite中查找包含分号(;)符号的值?,android,sql,sqlite,match,Android,Sql,Sqlite,Match,我正在用分号(;)符号搜索值。因此,我: SELECT * FROM table WHERE value MATCH '; "+lookingFor+"*' 它在SQLite中给出了逻辑错误。如何向程序解释“;”不是为了把代码分解成碎片?我做错了什么 PS.值列示例: apple; orange; banana pineapple; watermelon 这是一个问题: query = "SELECT id AS _id, entry_id , re_value, ke_value,
;
)符号搜索值。因此,我:
SELECT * FROM table WHERE value MATCH '; "+lookingFor+"*'
它在SQLite中给出了逻辑错误。如何向程序解释“;”不是为了把代码分解成碎片?我做错了什么
PS.值列示例:
apple; orange; banana
pineapple; watermelon
这是一个问题:
query = "SELECT id AS _id,
entry_id ,
re_value,
ke_value,
g_value
FROM search_eng_fts
WHERE g_value MATCH '"
+ lookingFor+ "* OR
; "+lookingFor+"*'
ORDER BY length(g_value)
LIMIT 100";
以下SQL工作:
SELECT * FROM list WHERE value like '%; banana%'
尽管您可能希望采取措施避免SQL注入,但以下SQL仍然有效:
SELECT * FROM list WHERE value like '%; banana%'
尽管根据
MATCH运算符是MATCH()应用程序定义函数的特殊语法。默认match()函数实现会引发异常,对任何事情都没有实际用处。但是扩展可以用更有用的逻辑覆盖match()函数
您是否考虑过不将值存储为分隔字符串,而是按照预期使用关系数据库,这样每个值在新表中都有自己的行
e、 g而不是
T
TID Name Value
1 Test apple; orange; banana
2 Test2 pineapple; watermelon
TID Name
1 apple
1 orange
1 banana
2 pineapple
2 watermelon
你有两张桌子
T-存储关键信息
TID Name
1 Test
2 Test2
T值-通过返回到T的链接存储值
TID Name Value
1 Test apple; orange; banana
2 Test2 pineapple; watermelon
TID Name
1 apple
1 orange
1 banana
2 pineapple
2 watermelon
这样,您的查询就会变成:
SELECT T.TID, T.Name, TValues.Name
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
WHERE TValues.Name = 'apple';
如果需要返回到可在SQLite中使用的单个字符串:
SELECT T.TID, T.Name, GROUP_CONCAT(TValues.Name, '; ') AS Value
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
GROUP BY T.TID, T.Name;
根据
MATCH运算符是MATCH()应用程序定义函数的特殊语法。默认match()函数实现会引发异常,对任何事情都没有实际用处。但是扩展可以用更有用的逻辑覆盖match()函数
您是否考虑过不将值存储为分隔字符串,而是按照预期使用关系数据库,这样每个值在新表中都有自己的行
e、 g而不是
T
TID Name Value
1 Test apple; orange; banana
2 Test2 pineapple; watermelon
TID Name
1 apple
1 orange
1 banana
2 pineapple
2 watermelon
你有两张桌子
T-存储关键信息
TID Name
1 Test
2 Test2
T值-通过返回到T的链接存储值
TID Name Value
1 Test apple; orange; banana
2 Test2 pineapple; watermelon
TID Name
1 apple
1 orange
1 banana
2 pineapple
2 watermelon
这样,您的查询就会变成:
SELECT T.TID, T.Name, TValues.Name
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
WHERE TValues.Name = 'apple';
如果需要返回到可在SQLite中使用的单个字符串:
SELECT T.TID, T.Name, GROUP_CONCAT(TValues.Name, '; ') AS Value
FROM T
INNER JOIN TValues
ON T.TID = TValues.TID
GROUP BY T.TID, T.Name;
能否粘贴用于执行查询的代码!你能粘贴你用来执行查询的代码吗!在我的情况下,LIKE很慢。如何将其用于匹配?FTS忽略标点符号。您必须编写自己的标记器,但这在Android中是不可能的。好吧!这就是我想要的!现在我知道我无法通过分号找到单词。虽然正确的规范化,如GarethD所示,几乎肯定会更好地解决您的问题。在我的情况下,LIKE是非常缓慢的。如何将其用于匹配?FTS忽略标点符号。您必须编写自己的标记器,但这在Android中是不可能的。好吧!这就是我想要的!现在我知道我无法通过分号找到单词。尽管正确的规范化,如GarethD所示,几乎肯定会更好地解决您的问题。