我想在我现有的android上的sqlite数据库上执行以下操作,这是一种类似的构建 colomns:id --- rule --- path --- someotherdata
现在的规则,例如包含文件名的一部分(或者只是一些简单的东西,如“mypicture”或文件类型,如“jpg”)。现在我想要做的是,我想写一个查询,它获取我的所有规则,其中包含inputtring的一部分。 我试过以下示例:String value =“somepicturefilename.jpg”
我的陈述:
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule)!=0 ORDER BY " + KEY_ID+ " DESC;"
该语句在java中,因此应在语句中插入“value”。
然而,这不起作用。我不太熟悉sql和sqlite,有没有人有一个提示=;)谢谢。
编辑:我也尝试过charindex,它也没用。
编辑:这是一个更详细的例子。 给出了以下数据库。
id --- rule ---
1 "jpg"
2 "ponies"
3 "gif"
4 "pdf"
现在用户输入文件名。让我们说“poniesAsUnicorns.jpg”。所以“poniesAsUnicorns.jpg”是我的输入字符串,查询应该匹配id#1和id#2,因为“poniesAsUnicorns.jpg”包含“jpg”和“ponies”
我希望澄清我想要的东西。
编辑: 这也是我试过的:
String statement = "SELECT DISTINCT * FROM " + TABLE_RULES
+ " WHERE charindex(rule,'" + value
+ "') > 0 ORDER BY " + KEY_ID + " DESC;";
但抛出“没有这样的操作”例外。
答案 0 :(得分:3)
AFAIK instr()
不可用,因此您可以使用:
select * from table where replace("poniesAsUnicorns.jpg", rule, "") != "poniesAsUnicorns.jpg";
或不区分大小写的匹配:
select * from table where replace(upper("poniesAsUnicorns.jpg"), upper(rule), "") != upper("poniesAsUnicorns.jpg");
答案 1 :(得分:0)
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '%"+ value + "%' ORDER BY " + KEY_ID+ " DESC;"
尝试这个。
答案 2 :(得分:0)
在LIKE模式中使用下划线(_)而不是百分比(%)。下划线将匹配值中的任何单个字符,而不是整个字符串序列。
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '_"+ value + "_' ORDER BY " + KEY_ID+ " DESC;"
答案 3 :(得分:0)
我看不出你的SQL表达式有什么问题......唯一可能导致它被杀死的是不等式运算符!=
试试这个:
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule) > 0 ORDER BY " + KEY_ID+ " DESC;"
我不确定Android中的SQLite实现是否完整,你可能会发现某些操作不起作用,所以做一些简单的测试作为完整性检查。
如果这不起作用,您可以改变条件。
[field]='some_value'
与以下一样有效:
'some_value'=[field]
因此,在您的示例中,我认为您应该能够执行以下操作:
select distinct * from TABLE_RULES
where 'poniesAsUnicorns.jpg' like '%' + rule + '%';
我在mySQL中对此进行了测试,它不喜欢+
连接,但它确实像这样工作:
select distinct * from TABLE_RULES
where 'poniesAsUnicorns.jpg' like replace('%rule%','rule',rule);
答案 4 :(得分:0)
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE '" + value + "' like '%' || rule || '%' ORDER BY " + KEY_ID + " DESC;"