私はパラメータ化されたクエリのためにAndroidにどのインタフェース/クラスが存在するかを見てきましたが、それはちょっと混乱しています。
実際はありません。
誰かが中で最高の(そして最も安全な)何であるか、それを明確にすることができます:あなたは「ベスト」の基準だと思うものを定義していないので、ノー
。これらの個人
SQLiteDatabase.rawQueryを(使用してSQLiteDatabase.query() を使用して
)
、私はそれが最も読みやすいことを見つけるように、私は、rawQuery()
を使用しています。 IMHO、query()
は、個々の部分(テーブル名、列のリストなど)からSELECTステートメントを作成しようとしている場合は、その一部が可変である場合が多いためです(ユーザーごとに異なるテーブルなど)。一日の終わりに、彼らはどちらも同じことをします。 query()
はカバーの下にSQLiteQueryBuilder
を使用します(下記参照)。 compileStatementを使用してSQLiteStatement を使用して
()
これらは同じものです。 SQLiteStatement
は、Javaが「クラス」と呼ぶものです。 compileStatement()
は、Javaが「メソッド」と呼ぶものです。 compileStatement()
メソッドは、SQLiteStatement
クラスのインスタンスを返します。
SQLiteStatement
は、単一列/単一行の応答を除き、完全な結果セットを返すことができないため、通常はクエリにとって便利です。これは、個々の部品からクエリを構築する別の方法ですSQLiteQueryBuilder
を使用して
。 ContentProvider
とそのコンシューマであるContentProvider
など、複数の関係者がクエリの内容を決定する場合に便利です。しかしそれを超えて、最終的にはrawQuery()
を実行します。したがって、SQLiteQueryBuilder
を使用するか、またはrawQuery()
を直接使用すると、結果に大きな違いはありません。これは推奨されておらず、いずれにしてもSQLiteDatabase
に関連しない
managedQueryを用い
()。
使用ContentValues
これはSQLiteDatabase
に対するクエリとは何の関係もありません。
そう多くは
を存在する理由、誰もが説明できますいくつかはSQLiteDatabase
に対するクエリとは何の関係も持たない多くの場合、異なる役割を果たします。 query()
はSQLiteQueryBuilder
を使用し、SQLiteQueryBuilder
はrawQuery()
を使用しています:あなたの名簿(rawQuery()
、query()
、そしてSQLiteQueryBuilder
)のうち3つの有効なオプションに関しては
は、それらはすべて同じことを行います。唯一の違いは、SQL SELECT
ステートメントがどのように構築されるかです。
ありがとう、もう少しクリア! –