2011-04-18 26 views
7

Tengo una tabla de base de datos con 3 columnas: id, name, permission.cómo usar rawQuery en android

Parece que este:

1 Comics divertido

2 Comunicación charla

3 Comics observo

Estoy tratando de obtener el permiso en el que el nombre es cómics. Estoy utilizando el siguiente código en mi clase de base de datos (AppData.java):

private final static String DB_NAME = "safety_app_database"; // the name of our database 
private final static int DB_VERSION = 1; // the version of the database 

// the names for our database columns 
private final String TABLE_NAME = "permissions_table"; 
private final String ID = "id"; 
private final String NAME = "name"; 
private final String PERMISSION = "permission"; 

y el método

public Cursor getData(){ 
     return db.rawQuery("SELECT permission FROM permissions_table WHERE name = 'Comics', null); 
    } 

y yo estoy llamando a esto en mi clase principal (safety.java). AppData hace referencia a AppData.java

appData.getData(); 

¿Es esta la forma correcta de hacerlo? No estoy seguro, y me está dando un error cada vez que trato de llamar a la consulta sql.

Respuesta

4

Error de un error tipográfico, no está cerrando cadena sql con ". prueba esto.

return db.rawQuery("SELECT permission FROM permissions_table WHERE name = 'Comics' ", null); 

[EDIT: JAR pertenece a 'Android 2.2' que no permite modificaciones a los archivos adjuntos de origen en sus entradas]

The Jar of this class file blongs to container Android 2.0.1 which does not allow modifications

+0

Creo que tendrá que escapar de las comillas simples aquí con \ ' – Maximus

+0

no, parece que no es mi sql, intenté usar el siguiente código y todavía me dio un error "Cursor getData pública() { \t \t \t retorno db.rawQuery (" SELECT * FROM permissions_table "null);" \t \t \t} –

+0

Además, en las consultas primas, o utilizando el método execSQL deberá finalizar la str ing con un punto y coma. – Maximus

0

No hay necesidad de una consulta en bruto. Puede utilizar uno de los métodos de consulta SQLiteDatabase recomendadas y que se vería así:

db.query("permissions_table", new String [] {permission}, "name = \'Comics\'", null, null, null, null); 
+1

eso tampoco funcionó, solo el mismo error cuando intento ejecutarlo y depurarlo. –

+0

¿Qué error está obteniendo en logcat? – Maximus

+0

disculpa dice: java.lang.NullPointerException en AppData.getData (AppData.java:71) –

0

pruebe el siguiente método:

public Cursor getData(String arg) { 
    return db.rawQuery("SELECT permission FROM `permissions_table` WHERE name ="+arg, null); 
} 

A continuación, sólo llamar al método anterior con el parámetro correcto de esta manera:

Cursor cursor; 

cursor = getData ("Comic"); 
+0

Para evitar posibles http://en.wikipedia.org/wiki/SQL_injection, usaría 'db.query' en su lugar. –

0

para ejecutar consultas, hay dos métodos: ejecutar método db.rawQuery ejecutar db.query método para ejecutar una consulta en bruto para recuperar todos los departamentos:

Cursor getAllDepts() 
    { 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, 
     "+colDeptName+" from "+deptTable,new String [] {}); 

    return cur; 
    } 

El método rawQuery tiene dos parámetros: Cadena de consulta: La instrucción de selección String [] args selección: Los argumentos si una cláusula WHERE se incluye en la instrucción de selección toma nota de los resultados de una consulta se devuelve en objeto Cursor. En una instrucción select si la columna de la clave principal (la columna id) de la tabla tiene un nombre distinto de _id, entonces debe usar un alias en el formulario SELECT [Column Name] como _id porque el objeto Cursor siempre espera que el primario la columna clave tiene el nombre _id o arrojará una excepción. Otra forma de realizar una consulta es utilizar un método db.query. Una consulta para seleccionar todos los empleados en un departamento determinado a partir de un punto de vista sería así:

public Cursor getEmpByDept(String Dept) { 
    SQLiteDatabase db=this.getReadableDatabase(); 
    String [] columns=new String[]{"_id",colName,colAge,colDeptName}; 
    Cursor c=db.query(viewEmps, columns, colDeptName+"=?", 
     new String[]{Dept}, null, null, null); 
    return c; 
    } 

El db.query tiene los siguientes parámetros: Nombre de tabla de cadenas: El nombre de la tabla para ejecutar la consulta contra la cadena [ ] columnas: la proyección de la consulta, es decir,, las columnas para recuperar la cláusula WHERE de cadena: cláusula where, si no pasa null Cadenas de selección String []: Los parámetros de la cláusula WHERE String Group by: Una cadena que especifica grupo por cláusula String Having: Una cadena que especifica la cláusula HAVING String Order By : Una cadena Ordenar por la cláusula