2012-05-07 7 views
0

私はSQLiteDatabaseオブジェクトのrawQueryメソッドを使用します。AndroidでのSqliteの奇妙なrawQuery動作

Iは

db.rawQuery書き込み( "DESCによってXXX順序SELECT * FROM;?"、新たな文字列[] { "EDIT_TIMEを"})。

結果を注文しません。私は

db.rawQueryを書くとき

しかし、( "EDIT_TIME DESCでxxxの順序から選択*;"、NULL);

です。

私は何か間違っていましたか?


サンデーのおかげで、私はドキュメントを誤読しました。 ";"はあってはいけません。しかし、 ";"何にも影響しないようです。

+1

選択引数にstuffを入れると、文字列としてバインドされますが、自動的にSQLの一部にはなりません。順序付け変数を並べ替える列と連結させたい場合。 – Jens

+0

@Jens私は正しい答えとしてコメントを選ぶことはできませんので、 – BlueWanderer

答えて

0

イェンスは、最初のクエリ言ったように:

db.rawQuery("select * from xxx order by ? desc;", new String[] {"edit_time"}); 

は次のようになります。

select * from xxx order by 'edit_time' desc 

私たちは、あなたが使用する必要があり、列名にSQLインジェクション、と心配していないので:

db.rawQuery("select * from xxx order by edit_time desc", null); 

selectionArgsは次のように使用されます。

db.rawQuery("select * from xxx order by edit_time like ? desc", new String[] { "%" + orderBy + "%"}); 
2

documentationには、おそらく問題の原因となる"The SQL string must not be ; terminated"が指定されています。

+0

ちょうどテストされています。有り無し;第二のものは動作し、第一のものは動作しません。 – BlueWanderer

+0

descの後にセミコロンを削除すると、最初のものは機能しません。それが地獄への私の答えの理論を吹き飛ばすならば。 – Barak