web-dev-qa-db-fra.com

Requête SELECT Android SQLite

J'ai pris la valeur String d'un EditText et l'ai placée dans la condition SELECT QUERY after WHERE

Comme

TextView tv = (TextView) findViewById(R.id.textView3);
EditTextet2 et = (EditText) findViewById(R.id.editText1);

String name = et.getText().toString();

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE name = '"+name+"'", null); 

c.moveToNext();

tv.setText(c.getString(c.getColumnIndex("email")));

Mais ça ne marche pas. Aucune suggestion? 

21
Hiran D.A Walawage

Essayez de couper la chaîne pour vous assurer qu'il n'y a pas d'espace blanc supplémentaire:

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE TRIM(name) = '"+name.trim()+"'", null);

Utilisez également c.moveToFirst() comme @thinksteep mentionné.

C'est un code complet pour les instructions select.

SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT column1,column2,column3 FROM table ", null);
if (c.moveToFirst()){
    do {
        // Passing values 
        String column1 = c.getString(0);
        String column2 = c.getString(1);
        String column3 = c.getString(2); 
        // Do something Here with values
    } while(c.moveToNext());
}
c.close();
db.close();
24
Vladimir Monsanto

Essayez d'utiliser l'énoncé suivant:

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE name = ?", new String[] {name});

Android requiert que les clauses WHERE soient comparables à un?, Et vous spécifiez alors un nombre égal de? dans le deuxième paramètre de la requête (où vous avez actuellement null).

Et comme Nambari l’a mentionné, vous devriez utiliser c.moveToFirst() plutôt que c.moveToNext()

Aussi, pourrait-il y avoir des citations de nom? Cela pourrait tout gâcher.

12
Zach Lauzon

Voici le code ci-dessous.

String areaTyp = "SELECT " +AREA_TYPE + "  FROM "
            + AREA_TYPE_TABLE + " where `" + TYPE + "`="
            + id;

où id est la condition sur laquelle le résultat sera affiché.

1
CoderDecoder
 public User searchUser(String name) {
    User u = new User();
    SQLiteDatabase db = this.getWritableDatabase(); //get the database that was created in this instance
    Cursor c = db.rawQuery("select * from " + TABLE_NAME_User+" where username =?", new String[]{name});
    if (c.moveToLast()) {
        u.setUsername(c.getString(1));
        u.setEmail(c.getString(1));
        u.setImgUrl(c.getString(2));
        u.setScoreEng(c.getString(3));
        u.setScoreFr(c.getString(4));
        u.setScoreSpan(c.getString(5));
        u.setScoreGer(c.getString(6));
        u.setLevelFr(c.getString(7));
        u.setLevelEng(c.getString(8));
        u.setLevelSpan(c.getString(9));
        u.setLevelGer(c.getString(10));
        return u;

    }else {
        Log.e("error not found", "user can't be found or database empty");
        return u;
    }

}

C’est mon code pour sélectionner un utilisateur et un seul Vous devez donc créer un objet vide de votre classe. vous appelez votre base de données en écriture utilisez un curseur au cas où il y en aurait plusieurs et vous en avez besoin d'un ici vous avez le choix Utilisation: 1-

   if (c.moveToLast()) { } //it return the last element in that cursor 

ou Utilisation: 2- 

 if(c.moveToFirst()) {  } //return the first object in the cursor 

et n'oubliez pas que dans le cas où la base de données est vide, vous devrez vous en occuper. Dans mon cas, je viens de renvoyer un objet vide. 

Bonne chance

0
thunderkill