複数列を指定したCursorの取得方法

857 views
Skip to first unread message

nina

unread,
Jun 15, 2011, 9:35:18 AM6/15/11
to 日本Androidの会
いつもお世話になっております。
ninaと申します。

AndroidのSQLiteを利用して、データベースの検索処理を作っています。
複数列を指定して条件一致させたいのですが、上手くいかずはまっています。
たとえば以下のようなデータベースの場合ですと、

_id column1 column2 column3 column4
----------------------------------------------------------------------------------
1 どうぶつ けしき キラキラ
2 カフェ どうぶつ
3 けしき

column1、2、3を指定して、「どうぶつ」と一致する行を取得しようと思っています。

実際に書いてみたソースは以下です。

String tag = "どうぶつ";
QueryInfo queryInfo = new QueryInfo();
queryInfo.mUri = Uri;
queryInfo.mProjection = new String[] {column1, column2, column3};
queryInfo.mSelection = coloumn1 + "=" + tag + "||" +
coloumn2 + "=" + tag + "||" +
coloumn3 + "=" + tag;
queryInfo.mSelectionArgs = null;
queryInfo.mSortOrder = null;

Cursor c = db.query(queryInfo);

実行し、レコードの数を取得した場合、2(レコード1と2)が取れればいいのですが、
現状0がとれてしまいます。
全件検索した場合はきちんと3がとれているので、Uri等には間違いはなく、
mSelectionかmSelectionArgsの書き方が違うのかなと思っています。

どなたか、ご存知の方がいましたら、ご教授いただけないでしょうか。

yuka2py

unread,
Jun 15, 2011, 7:25:51 PM6/15/11
to android-g...@googlegroups.com

ゆぅかです。おはようございます。

以下でどうでしょうか?

queryInfo.mSelection = coloumn1 + "= ? OR " + coloumn2 + "= ? OR " + coloumn3 + "= ?";
queryInfo.mSelectionArgs = new String[] {tag, tag, tag};

-- ゆぅか。

2011/06/15 22:35 "nina" <sawata...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

Yoshida Kenichi

unread,
Jun 15, 2011, 9:50:44 PM6/15/11
to android-g...@googlegroups.com
吉田@ECCコン専です。

ゆぅかさんのご指摘でうまくいくと思いますが、
列名がcolumn1,column2,column3で固定でしたら
以下のようにしたほうが間違いがないかもしれません。

queryInfo.mSelection = ”column1= ? OR column2= ? OR column3= ?";


queryInfo.mSelectionArgs = new String[] {tag, tag, tag};

> queryInfo.mSelection = coloumn1 + "= ? OR " + coloumn2 + "= ? OR " +
でORの後ろにスペースが入っているのに気がつかない人が多いです。
(String coloumn1 = "column1";がどこかにあるという前提で話をしています )
いずれにしても以下のSQL文がただしくJavaのメソッドで指定できれば、
希望の結果を得られると思います。

SELECT column1, column2, column3
FROM テーブル名
WHERE column1= 'どうぶつ'
OR column2= 'どうぶつ'
OR column3= 'どうぶつ';


2011年6月16日8:25 yuka2py <yuk...@gmail.com>:

nina

unread,
Jun 15, 2011, 10:10:42 PM6/15/11
to 日本Androidの会
ゆぅかさん、吉田さん

ninaです。
ご教示頂いた方法で試したところ、正常に検索できました!
ゆぅかさんの方法でも以前試してはいたのですが、
queryInfo.mSelectionの部分を改行して記載していたこと、
吉田さんの仰る通り、ORの後ろにスペースがついていなかったことが原因で
検索できていなかったのだと思います。

おかげさまで無事解決できました。
ありがとうございました。

On 6月16日, 午前10:50, Yoshida Kenichi <dietpos...@gmail.com> wrote:
> 吉田@ECCコン専です。
>
> ゆぅかさんのご指摘でうまくいくと思いますが、
> 列名がcolumn1,column2,column3で固定でしたら
> 以下のようにしたほうが間違いがないかもしれません。
>
> queryInfo.mSelection = ”column1= ? OR column2= ? OR column3= ?";
> queryInfo.mSelectionArgs = new String[] {tag, tag, tag};
>
> > queryInfo.mSelection = coloumn1 + "= ? OR " + coloumn2 + "= ? OR " +
>
> でORの後ろにスペースが入っているのに気がつかない人が多いです。
> (String coloumn1 = "column1";がどこかにあるという前提で話をしています )
> いずれにしても以下のSQL文がただしくJavaのメソッドで指定できれば、
> 希望の結果を得られると思います。
>
> SELECT column1, column2, column3
> FROM テーブル名
> WHERE column1= 'どうぶつ'
> OR column2= 'どうぶつ'
> OR column3= 'どうぶつ';
>
> 2011年6月16日8:25 yuka2py <yuka...@gmail.com>:
>
>
>
>
>
>
>
> > ゆぅかです。おはようございます。
>
> > 以下でどうでしょうか?
>
> > queryInfo.mSelection = coloumn1 + "= ? OR " + coloumn2 + "= ? OR " +
> > coloumn3 + "= ?";
> > queryInfo.mSelectionArgs = new String[] {tag, tag, tag};
>
> > -- ゆぅか。
>
> > 2011/06/15 22:35 "nina" <sawata.har...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages