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); 
  • Consulta de selección en sqlite android
  • Android - SQLiteException: near "=": error de sintaxis (código 1)
  • Confuso respecto a SQLiteOpenHelper y crear varias tablas
  • Cambiar el número de versión de la base de datos SQLite
  • Cómo actualizar la base de datos Sqlite para una sola columna utilizando cláusula WHERE en android
  • No se puede abrir la base de datos-Android
  • Android sqlite: No se pudo cambiar la configuración regional de db en 'zh_CN'
  • ¿Cómo recuperar un ID del elemento seleccionado en un Spinner dinámico?
  • GreenAno QueryBuilder concatena dinámicamente las condiciones
  • Expulsión de desencadenamiento de SQLite para eliminar filas
  • Los ejemplos de ORMLite para Android no compilarán
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.