2013-11-04 56 views
0

我有一个sql database由一列Contact_Priority组成,它由整数组成字符串条目(即1,2 ...但保存为字符串)。 Contact_Priority可能包含多个数字。我正在使用以下查询来获取包含特定数字的行数。SQLite数据库where子句无法正常工作

SQLiteDatabase sqLiteDatabase = this.getReadableDatabase(); 
     Cursor cursor = sqLiteDatabase.query(CONTACT_TABLE, null, Contact_Priority + " =? ", new String[]{priority} , null, null, null); 

     int count = cursor.getCount(); 

但它返回0,尽管数据库中存在一些行。

,如果我把Cursor cursor1 = sqLiteDatabase.query(CONTACT_TABLE, null, null, null, null, null, null, null);

我得到的行数正确。我很困惑,为什么它不工作。

P.S. - Contact_Priority在其行中有priority,即没有错字错误。 enter image description here

我只是想知道有多少行数具有相同的优先级。

更新: -

我不知道是否有帮助,但我做的应用程序分配一些联系人号码给定Contact_Priority。我所做的是,当我添加一个联系人到任何特定Contact_Priority即1,2个左右,在一个按钮上单击我可以添加到所有的优先级,即优先级1到8将具有相同的联系人,你可以看到在上面的图像。

这我已经成功实施,现在虽然显示优先级的联系人,我得到的问题,但奇怪的是它正在一个特定的优先事项,通过我设置所有类似的联系人。

考虑我选择保持优先级为“2”的所有联系人,那么我得到正确的输出为“2”,即正确的行数,而其他所有其他我得到0.我检查数据库是否更新和行更新,但为什么我得到的输出只有一个优先我不明白。

更新2

priority值取决于它包含其上的onClick查询函数被调用的按钮listview的位置。例如。考虑一下,我将priority2的联系人复制到其他人。数据库已更新,如上图所示。现在,当我点击listview child 1的按钮时,优先级为1,如果我点击第二个孩子的按钮,那么优先级为2等等。由于一些奇怪的原因,它的工作优先级是“2”(因为我将“2”的联系人全部复制到了全部)。对于其他人来说,这不起作用。

现在,如果我有复制的“优先级3”的联系人,然后它会工作了,只有当优先级为“3”(即我点击就行了3按钮)和不工作的任何人。

我想我已经说清楚了。抱歉让大家困惑,我自己很困惑,因为我还没有看到这样的奇怪问题。

+0

如果输出该句子正在生成的查询,您会立即发现问题。这样做并粘贴在这里。 –

+0

我不明白'Contact_Priority可能包含多个数字'? – njzk2

+0

Contact_Priority变量的值是多少?优先级变量的? – njzk2

回答

0

我不知道为什么,这是工作,但通过下面的查询得到我想要的结果

Cursor cursor = sqLiteDatabase.rawQuery("Select * from Contact where Contact_Priority =" + priority,null); 

由于两个查询是相同的,我不明白为什么这是工作和以前的一个没有。我为所有面临类似问题的人提及这个答案。如果任何人有明确的答案是什么导致此查询工作和以前的查询不起作用请在评论中提及。

0

请看看这里: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html 什么Contact_Priority变量的意图?为什么你使用“=?”这个字符串?

方法的定义正在其中使用的是:

查询(字符串表,字符串[]栏,串选择,字符串[] selectionArgs两个,字符串GROUPBY,具有字符串,字符串ORDERBY,字符串限制)

它应该是这样的: CONTACT_TABLE,空,Contact_Priority,新的String [] {优先},NULL,NULL,NULL,NULL

+0

如果你把Cursor cursor1 = sqLiteDatabase.query(CONTACT_TABLE,null,null,null,null,null,null); 它应该工作,因为你只需键入“select * from Contact_Table” –

+1

这是不正确的。 'selection'是来自'WHERE'子句([query](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html))的内容,它接受'selectionArgs'中指定的参数。 –

+0

@ibrahimdemir:你认为'=?'有什么问题?这就是选择如何指示selectionArgs位置。 – njzk2

0
.query(CONTACT_TABLE, null, Contact_Priority + " =? ", new String[]{priority} , null, null, null); 

将返回所有行其中Contact_Priority(我希望是AV易用"Contact_Priority")正好等于priority给出。

你不想确切的说,你要匹配,所以:

.query(CONTACT_TABLE, null, "','||Contact_Priority||',' LIKE '%,'||?||',%'", new String[]{priority} , null, null, null); 

会做!

编辑:忘了通配符...

+0

我从来没有见过这种符号。你能解释它的作用吗? – njzk2

+0

@ njzk2它匹配逗号分隔列表中的一个项目,该列表可能是第一个,最后一个或列表中的项目。尝试在'10,2,11'中匹配'1'! –

+0

我不明白你的列表中的某些内容与这个问题相关吗? – njzk2

0

你可以试试这个,以及

String.format(Contact_Property + " = \'%s\'", priority); 

,并设置selectionArgs两个参数为空。

+0

我看不到任何理由,为什么这应该更好。你可以给一个吗? – njzk2

+0

我遇到了类似的问题,并使用它解决。 – jagmohan

+0

like will return + ve count for similar values not exaclty –