2017-05-04 12 views
-1

私はSqliteではクエリが機能しません。

Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM DATA where Subgroup IN (?) and Indicator=? and Unit=? ", new String[]{subgroup, indicator, unit}); 

サブグループは、 " 'XYZ'、 'ABC'" のようなものである次のクエリを使用しています。およびインジケータとユニットは文字列ですが、クエリはテーブル内に存在していても値を返しません.Sqliteでクエリを行う別の方法があります。

答えて

1

パート1あなたはsubgroup内のアイテムの数に基づいて、プレースホルダ(?)INのために提供する必要があるので、あなたが作る3つのサブグループ内の項目、およびIndicatorのための2とUnitを持っている場合、クエリは次のようになります

Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM DATA where Subgroup IN (?,?,?) and Indicator=? and Unit=? ", new String[]{subgroup, indicator, unit}); 

パート2あなたはカンマ区切りでsubgroupを使用することはできません、それが配列である必要があります。 したがって、長さが等しい(1つのサブグループ項目の数、+ 2)1つの大きな配列が必要で、その配列のすべてのパラメータ値をマージします。

再び問合せは、(すべてのparamsは、アレイoneBigArrayOfParamsにマージされていると仮定)次のようになります。

Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM DATA where Subgroup IN (?,?,?) and Indicator=? and Unit=? ", oneBigArrayOfParams); 
0

私はその正しい方法を考えていけないが、私は次の文とその作業を使用していました。

カーソルcursorLength = sqLiteDatabase.rawQuery( "SELECT * FROM DATAここで、Subgroup IN(" + subgroup + ")およびIndicator =?およびUnit =?"、new String [] {indicator、unit});

+1

数値が数値の場合は '' 'で囲まなければなりません。これはプリペアドステートメントを使用する方法ではありません。また、(Sql Injection)のようにいくつかのセキュリティ上の問題があります。ウェブサイトでは、それは最小の悪い練習になる可能性がありますか? – Yazan

関連する問題