0

以下のステートメントを Android の rawQuery として渡しています。

SELECT DISTINCT ltUsers._id,ltUsers.NAME,ltUsers.GLOBAL_ID, ltGroups.GROUP_NAME
        FROM ltUsers
        JOIN ltGroups ON (ltUsers.GROUP_ID = ltGroups.GLOBAL_ID)    
        WHERE ltgroups.GLOBAL_ID = ? " +
        ORDER BY ltUsers.NAME ASC,ltgroups.GLOBAL_ID ASC;

rawQuery を次のように使用します。

Cursor c = db.rawQuery(sql,args)

パラメータに値を渡すと問題なく動作します。

String[] args = new String[]{"2"}

GLOBAL_IDただし、WHERE句で無制限にすべての行を表示できるようにしたいと考えています。Android の外部にある SQLite データベースのダンプをテストするだけでなく、ステートメントにパラメーターを直接書き込むことによって Android でテストすると、次の句がこれを行う有効な方法であることがわかります。

WHERE ltGroups.GLOBAL_ID = ltGroups.GLOBAL_ID

しかし、フィールド参照を渡すltGroups.GLOBAL_ID[ltGroups].[GLOBAL_ID]、パラメーターとして渡すと、rawQuery に行が返されません。なぜこれが起こっているのかについてのアイデアはありますか? 追加情報を喜んで作成します。

4

1 に答える 1

1

パラメータは常に特定の値を置き換えますが、それ以外のものは置き換えません。

文字列 " ltGroups.GLOBAL_ID" をパラメーター配列に入れると、それはまさに文字列として解釈されます。

(すべてのレコードを表示するには、WHERE句を省略します。)

于 2013-07-07T13:17:55.110 に答える