106

Android の SQLite で準備済みステートメントを使用するにはどうすればよいですか?

4

5 に答える 5

24

私は常に Android で準備済みステートメントを使用していますが、それは非常に簡単です。

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("INSERT INTO Country (code) VALUES (?)");
stmt.bindString(1, "US");
stmt.executeInsert();
于 2009-01-12T17:12:21.640 に答える
23

戻り時にカーソルが必要な場合は、次のようなものを検討できます。

SQLiteDatabase db = dbHelper.getWritableDatabase();

public Cursor fetchByCountryCode(String strCountryCode)
{
    /**
     * SELECT * FROM Country
     *      WHERE code = US
     */
    return cursor = db.query(true, 
        "Country",                        /**< Table name. */
        null,                             /**< All the fields that you want the 
                                                cursor to contain; null means all.*/
        "code=?",                         /**< WHERE statement without the WHERE clause. */
        new String[] { strCountryCode },    /**< Selection arguments. */
        null, null, null, null);
}

/** Fill a cursor with the results. */
Cursor c = fetchByCountryCode("US");

/** Retrieve data from the fields. */
String strCountryCode = c.getString(cursor.getColumnIndex("code"));

/** Assuming that you have a field/column with the name "country_name" */
String strCountryName = c.getString(cursor.getColumnIndex("country_name"));

より完全なものが必要な場合は、このスニペットGenscriptsを参照してください。これはパラメーター化された SQL クエリであるため、本質的には準備済みステートメントであることに注意してください。

于 2010-09-03T14:55:40.830 に答える
9

jasonhudgins の例は機能しません。stmt.execute()でクエリを実行して値 (または ) を取得することはできませんCursor

プリコンパイルできるのは、行をまったく返さないステートメント (insert や create table ステートメントなど)、または単一の行と列を返すステートメント (およびsimpleQueryForLong()orを使用するステートメントsimpleQueryForString()) のみです。

于 2010-06-06T09:15:24.650 に答える
1

カーソルを取得するために、compiledStatement を使用することはできません。ただし、完全に準備された SQL ステートメントを使用する場合は、jbaez の方法を適用することをお勧めします... のdb.rawQuery()代わりに を使用しdb.query()ます。

于 2010-10-14T18:58:00.150 に答える