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?
- Diferencia entre las funciones window.openDatabase () y window.sqlitePlugin.openDatabase ()?
- Consulta SQLite de Android donde columna no es nula y no vacía
- Android abrir o crear base de datos
- Android: ¿Dónde se almacenan los archivos de base de datos?
- Sync SQLite / tabla de base de datos de Android a la tabla de base de datos MySQL remoto (a través de PHP)
- Problemas en la creación de varias tablas en sqlite
- Obtención del tipo de una columna en SQLite
- Excepción de puntero nulo de SQLiteOpenHelper.getWriteableDatabase () en Android
- "SELECT last_insert_rowid ()" devuelve siempre "0"
- Android insertWithOnConflict devolviendo el valor equivocado
- Prueba de unidad de base de datos SQLite de Android
- Cómo obtener las cadenas de un cursor en Android?
- Ormlite leer Fecha como 'yyyy-MM-dd'
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);
- android Tab Layout Diseño de la biblioteca
- El menú desplegable HTML aparece vacío en Android lollipop