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); 
  • Importar archivo .sql en la base de datos sqlite
  • RawQuery: enlace o índice de columna fuera de rango
  • Cómo ocultar filas específicas de un cursor en android
  • Android table creation Fallo (cerca de "autoincrement": error de sintaxis)?
  • Cómo puedo limitar el número de filas en la tabla SQLite de Android
  • SQLite en Android y MongoDB con sincronización
  • Actualización de Android 6.0 que causa DB sqlite falla durante init
  • ¿Es necesario cerrar una base de datos abierta con window.openDatabase?
  • Los datos no se insertan en la base de datos Sqlite en android
  • AutoCompleteTextView con CursorLoader y SimpleCursorAdapter
  • SQLite de repente considera todo como no un error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.