Android: Obtener registro aleatorio en SQLite

Busco registros en mi base de datos SQLite como esta.

spellId = extra.getString("spellId"); DBase db = new DBase(this); db.open(); String[] data = db.getRecord(Integer.parseInt(spellId)); db.close(); 

¿Puedo obtener datos aleatorios como este sin usar las consultas sin formato y el cursor?

Puede utilizar Random#nextInt() como

 String[] data = db.getRecord(new Random().nextInt(num)); 

donde num está en el rango de sus ID de registro. Tendría que adaptar esta solución en caso de que sus identidades sean fragmentadas y no formen un rango consecutivo.

Una de las maneras de hacerlo sería crear primero una consulta para buscar todas las claves primarias y almacenar los valores en un conjunto en alguna parte. Luego escoja una clave aleatoria generando un índice usando Random .

 String[] data = db.getRecord(IDSet.get(new Random().nextInt(IDSet.size()))); 

Echa un vistazo a los documentos para obtener más información.

Devuelve un valor int pseudo-aleatorio, uniformemente distribuido entre 0 (inclusive) y el valor especificado (exclusivo) , extraído de la secuencia del generador de números aleatorios.


Si está considerando una solución de consulta de base de datos

Una mejor alternativa al uso de ORDER BY RANDOM() (que es conocido por no escalar bien a medida que crece el número de filas en su tabla) es permitir que SQLite devuelva una fila aleatoria usando un OFFSET .

Primero guarde el número total de filas num algún lugar.

 SELECT COUNT(*) AS num FROM spells; 

A continuación, elija un número aleatorio rnum entre (0, num) utilizando Random y utilice la consulta

 SELECT * FROM spells LIMIT 1 OFFSET rnum; 

prueba de esta manera:

 db.rawQuery("SELECT * FROM mainTable ORDER BY RANDOM() LIMIT 1", null); 
  • No se puede cerrar debido a declaraciones sin finalizar Android
  • Android SQLite - selecciónArgs que no sean cadenas
  • Android.database.sqlite.SQLiteException: Token no reconocido:
  • ¿Qué hace la clase SQLiteOpenHelper con el parámetro de contexto?
  • Utilizando un botón para exportar sqlite db a un archivo excel-readable (quizás csv)?
  • SQLite "INSERT OR REPLACE INTO" no funciona
  • Base de datos de exportación de importación android
  • Cómo convertir la matriz de bytes en Bitmap
  • Posible obtener detalles de error específicos de Android SQLiteConstraintException?
  • Estoy usando SQLCIPHER para leer o escribir la base de datos que consigue el error
  • Sqlite query using foreign keys
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.