Foros del Web » Programando para Internet » Android »

Asignar el resultado de una sentencia SQLite a una variable

Estas en el tema de Asignar el resultado de una sentencia SQLite a una variable en el foro de Android en Foros del Web. Buenas Gente, Para una aplicación que estoy haciendo necesito saber cuantos elementos hay en una tabla de una base de datos, la sentencia en SQLite ...
  #1 (permalink)  
Antiguo 14/07/2013, 13:31
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Asignar el resultado de una sentencia SQLite a una variable

Buenas Gente,

Para una aplicación que estoy haciendo necesito saber cuantos elementos hay en una tabla de una base de datos, la sentencia en SQLite ya la tengo:

Código:
"SELECT COUNT(*) FROM Palabras WHERE Categoria = " + Categoria
Lo que quiero hacer es que el resultado de ejecutar esta sentencia se le asigne a una variable, ya he consultado en la web pero no encuentro algo que me funcione, de antemano muchas gracias por la ayuda.

Saludos.
  #2 (permalink)  
Antiguo 14/07/2013, 14:10
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Asignar el resultado de una sentencia SQLite a una variable

Por favor no concatenes valores en tu query ya que estos pueden ser usados para un ataque de sql injection y ademas que una mala practica.

Usa queries parametrizadas:
Código Java:
Ver original
  1. Cursor cursor = getReadableDatabase().
  2.   rawQuery("SELECT COUNT(*) FROM Palabras WHERE Categoria = ?", new String[] { Categoria });
  3. int numPalabras = cursor.getInteger(0);

Aquí hay un articulo:
http://www.vogella.com/articles/Andr...e/article.html
  #3 (permalink)  
Antiguo 20/07/2013, 15:13
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Asignar el resultado de una sentencia SQLite a una variable

Hola otra vez yo, ahora con un problema diferente.

Ya implemente el código que me pasaste, pero a la hora de llamar a la funcion para que me de el numero de elementos en la base de datos me da un error.

El codigo de la fucion en la clase donde se crea la base de datos es este:

Código:
	public int cuentaPalabras(String Categoria){
		SQLiteDatabase db = this.getReadableDatabase();
		int numPalabras = 0;
		try{
			Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM Palabras WHERE Categoria = ?", new String[] { Categoria });
			numPalabras = cursor.getInt(0);
		} catch(Exception e){
			Log.i("El error", e.toString());
		}
		
		return numPalabras;
	}
Al ejecutarse me retorna un 0, y en el log cat me da este mensaje:

Cita:
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
Ya revise la base de datos, y no parece tener nada fuera de lo normal.

Muchas gracias por la ayuda, y también por los consejos sobre inyección de código.
  #4 (permalink)  
Antiguo 20/07/2013, 19:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Asignar el resultado de una sentencia SQLite a una variable

Parece que los indices los maneja desde el 1, prueba con:

Código PHP:
Ver original
  1. int numPalabras = cursor.getInteger(1);
  #5 (permalink)  
Antiguo 20/07/2013, 19:41
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Asignar el resultado de una sentencia SQLite a una variable

No compañero, no funciono cambiando el 0 por 1.
  #6 (permalink)  
Antiguo 20/07/2013, 22:09
 
Fecha de Ingreso: julio-2013
Mensajes: 9
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Asignar el resultado de una sentencia SQLite a una variable

Hey razpeitia ya encontré la solución al problema, a punta de prueba y error.

Aquí te pongo el código para que veas y tal vez el día de mañana te sirva a ti o a cualquier otro en el foro:

Código Java:
Ver original
  1. public int cuentaPalabras(String Categoria){
  2.         SQLiteDatabase db = this.getReadableDatabase();
  3.         int numPalabras = 0;
  4.         try{
  5.             Cursor cursor = db.rawQuery("SELECT * FROM Palabras WHERE Categoria = ?", new String[] { Categoria });
  6.             numPalabras = cursor.getCount();
  7.         } catch(Exception e){
  8.             Log.i("El error", e.toString());
  9.         }
  10.        
  11.         return numPalabras;
  12.     }

Para explicarte un poco lo que hice, primero cambie la sentencia SQLite por un simple Select (sin el Count). Luego en vez de utilizar la función getInt(0); use la función getCount(); que se encarga de retornar el numero de filas que se encuentran dentro del cursor.

Espero que les sea de ayuda, saludos y gracias por los consejos.

Etiquetas: resultado, sentencia, sqlite, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:18.