3

我想在我现有的 android 上的 sqlite 数据库上执行以下操作,这有点像这样的 colomns:id --- rule --- path --- someotherdata

例如,现在的规则包含文件名的一部分(可能只是一些琐碎的东西,如“mypicture”或文件类型,如“jpg”)。现在我想做的是,我想编写一个查询,它获取我的所有规则,其中包含输入字符串的一部分。我尝试了以下示例: String value = "somepicturefilename.jpg"

我的声明:

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule)!=0 ORDER BY " + KEY_ID+ " DESC;"

该语句在java中,因此“值”应该插入语句中。

但是,这不起作用。我对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;";

但抛出“没有这样的操作”异常。

4

5 回答 5

3

AFAIKinstr()不可用,因此您可以使用:

select * from table where replace("poniesAsUnicorns.jpg", rule, "") != "poniesAsUnicorns.jpg"; 

或者对于不区分大小写的匹配:

select * from table where replace(upper("poniesAsUnicorns.jpg"), upper(rule), "") != upper("poniesAsUnicorns.jpg");
于 2013-04-23T23:31:40.893 回答
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);
于 2013-04-24T00:34:26.487 回答
0

在 LIKE 模式中使用下划线 (_) 而不是百分比 (%)。下划线将匹配值中的任何单个字符,而不是整个字符串序列。

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '_"+ value + "_' ORDER BY " + KEY_ID+ " DESC;"

LIKE 运算符

于 2013-04-23T23:50:32.293 回答
0
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE '" + value + "' like '%' || rule || '%' ORDER BY " + KEY_ID + " DESC;"
于 2013-04-24T08:18:45.010 回答
0
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '%"+ value + "%' ORDER BY " + KEY_ID+ " DESC;"

试试这个。

于 2013-04-23T22:32:06.773 回答