2012-02-08 14 views
5

私はパラメータ化されたクエリのためにAndroidにどのインタフェース/クラスが存在するかを見てきましたが、それはちょっと混乱しています。AndroidでSQLのパラメータ化されたクエリ

は、誰かがそれが何であるかを明確にすることができます中で最高の(そして最も安全):SQLiteQueryBuilderを使用してSQLiteStatement

  • を使用してSQLiteDatabase.rawQuery()
  • を使用してSQLiteDatabase.queryを使用して

    • ()
    • compiledStatement()を使用しています
    • managedQuery()を使用しています
    • ContentValuesを使用して
    • を使用します。 execSQL()

    なぜ多くの人が存在しているのか、それらの違いは何か、クエリーのバインドパラメータを持つ最良の方法は何ですか?

  • 答えて

    9

    私はパラメータ化されたクエリのために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を使用し、SQLiteQueryBuilderrawQuery()を使用しています:あなたの名簿(rawQuery()query()、そしてSQLiteQueryBuilder)のうち3つの有効なオプションに関しては

    は、それらはすべて同じことを行います。唯一の違いは、SQL SELECTステートメントがどのように構築されるかです。

    +0

    ありがとう、もう少しクリア! –