109 votes

Comment utiliser des instructions préparées dans SQlite sous Android?

Comment utiliser des instructions préparées dans SQlite sous Android?

25voto

jasonhudgins Points 1732

J'utilise des déclarations préparées dans Android tout le temps, c'est assez simple:

 SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("SELECT * FROM Country WHERE code = ?");
stmt.bindString(1, "US");
stmt.execute();
 

23voto

jbaez Points 231

Si vous voulez un curseur sur le retour, alors vous pourriez envisager quelque chose comme ceci:

 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"));
 

Voir cet extrait Genscripts au cas où vous en voudriez un plus complet. Notez qu'il s'agit d'une requête SQL paramétrée. Il s'agit donc essentiellement d'une instruction préparée.

9voto

user359606 Points 80

exemple jasonhudgins ne fonctionnera pas. Vous ne pouvez pas exécuter une requête avec stmt.execute () et obtenir une valeur (ou un curseur).

Vous pouvez uniquement précompiler des instructions qui ne renvoient aucune ligne (comme une instruction insert ou create table) ou une seule ligne et une seule colonne (et utilisez simpleQueryForLong () ou simpleQueryForString ()).

2voto

Aaron Points 403

Pour obtenir un curseur, vous ne pouvez pas utiliser un état compilé. Toutefois, si vous souhaitez utiliser une instruction SQL préparée complète, je recommande une adaptation de la méthode de jbaez ... Utilisation de db.rawQuery() au lieu de db.query() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X