2010-08-28 6 views
5

Mi objetivo final es limitar los registros que se pueden crear para que pueda tener una versión de prueba de mi aplicación. Estoy pensando que puedo hacer esto simplemente devolviendo una variable int dentro de una declaración sqlite count, y usando una instrucción IF simple para determinar si se debe crear un nuevo registro.Devuelve el recuento de registros en una variable, Sqlite, Android, Java

llamo así:

 
int jcount = 0; 
      mDbHelper.countjournals(jcount); 

En este momento estoy tratando de ejecutar este error

 
public int countjournals(int jcount){ 
      mDb.execSQL(jcount + " = SELECT COUNT(*) FROM "+DATABASE_JOURNAL_TABLE); 
      return jcount; 
     } 

que yo recibo:

 

08-27 22:42:32.417: ERROR/AndroidRuntime(3976): android.database.sqlite.SQLiteException: near "0": syntax error: 0 = SELECT COUNT(*) FROM journals 

+0

creo que se va a necesitar para proporcionar información adicional para obtener una respuesta aceptable –

+0

he elegido mi respuesta porque fue el que funcionó para mí. Aunque parece, al menos para mí, que todos deberían funcionar. – Brian

Respuesta

14

Las dos respuestas me parecieron como si debieran funcionar, pero no pude conseguirlas. He encontrado una tercera solución que está trabajando para mí.

 
    public long countjournals() { 

      return DatabaseUtils.queryNumEntries(mDb,DATABASE_JOURNAL_TABLE); 

     } 
+0

Muy impresionante, me perdí de clase DatabaseUtils – orip

3

Su consulta es incorrecta, mejor forma de hacer lo que necesita es:

public int countjournals() { 
     Cursor dataCount = mDb.rawQuery("select count(*) from" + DATABASE_JOURNAL_TABLE, null); 
     dataCount.moveToFirst(); 
     int jcount = dataCount.getInt(0); 
     dataCount.close(); 
     return jcount; 
    } 

Nota al margen: También tenga en cuenta que no puede usar variables primitivas como referencias (y de su código parece que está tratando de hacerlo), tampoco puede pasar referencias a consultas SQLite. En su lugar, solo debe asignar el resultado del método (consulta) a su variable.

+0

sin errores, pero solo me da una cuenta de 1 cuando hay más. – Brian

+0

Eso puede deberse a dos motivos: 1: en realidad, solo hay un registro, 2; probablemente haya más, pero solo 1 ya estaba comprometido con el archivo db. El fragmento de código es casi el 100% de copia de mi producción, así que estoy totalmente seguro de que es correcto. –

+0

Para mí, parece que debería funcionar. ¿Qué quieres decir con que ya estás comprometido? – Brian

6
public int countjournals() { 
    SQLiteStatement dbJournalCountQuery; 
    dbJournalCountQuery = mDb.compileStatement("select count(*) from" + DATABASE_JOURNAL_TABLE); 
    return (int) dbJournalCountQuery.simpleQueryForLong(); 
} 
+0

¿cómo debería definirse dbJournalCountQuery? – Brian

+0

código actualizado, SQLiteStatement dbJournalCountQuery; –

+0

Esto parece funcionar también. Pero todavía estoy obteniendo 1 como resultado cuando hay 4 – Brian

1

Sólo tiene que insertar un espacio después de un from que empezar a trabajar .....

Cursor dataCount = mDb.rawQuery("select count(*) from " + DATABASE_JOURNAL_TABLE, null); 
Cuestiones relacionadas