2012-02-14 23 views
21

he tomado String valor de una EditText y la puso dentro SELECT QUERY after WHERE condiciónAndroid SQLite consulta SELECT

Como

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

Pero no funciona. ¿Alguna sugerencia?

+3

imprima el nombre y asegúrese de obtener un nombre válido. use c.moveToFirst(); en lugar de C .... next() y prueba. – kosa

Respuesta

33

Try recorte de la cadena para asegurarse de que no hay espacio en blanco adicional:

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

también utilizar como c.moveToFirst() @thinksteep mencionado.

+6

Este ejemplo es muy malo y permite inyecciones de SQL. ¿Por qué no utilizar el segundo parámetro correctamente en lugar de insertar nulo? –

9

Trate de usar la siguiente declaración:

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

Android requiere que las cláusulas WHERE comparan con una y, a continuación, especifique un número igual de?? en el segundo parámetro de la consulta (donde actualmente tiene nulo).

y como se mencionó Nambari, se debe utilizar en lugar de c.moveToFirst()c.moveToNext()

Además, puede haber citas en nombre? Eso podría arruinar las cosas también.

2

Aquí está el código a continuación.

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

donde id es la condición en la que se mostrará resultado.

+1

Esto tiene un problema de inyección SQL –

22

Este es un código completo para las declaraciones de selección.

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(); 
+1

Ha solucionado mi problema. –

+1

Tenga en cuenta que el uso de c.getString (c.getColumnIndex ("column1")) es mejor que c.getString (0): no tendrá que actualizar los índices si cambia su consulta. – chteuchteu

+0

También escapé el parámetro de nombre para evitar la inyección de SQL – saniales

Cuestiones relacionadas