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?
- Android / ORMLite Insertar fila con ID
- Intenta invocar el método virtual 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query en la referencia de objeto nulo
- DB SQLite de Android Cuando cerrar
- Registro de consultas SQL en android
- El mejor lugar para cerrar la conexión de la base de datos
- Diferencias de SQLite entre Android 2.1 y 2.2
- La aplicación se bloquea al iniciar Debido a java.lang.IllegalArgumentException: la columna '_id' no existe
- SQLite - insertar una cadena con nuevas líneas en la base de datos desde el archivo csv
- Cómo convertir el objeto de cursor en XML o JSON en android
- Compruebe que la base de datos sqlite está abierta o cerrada en android
- Eliminar varias filas en SQLITE (android)
- Cambio de cursor en CursorAdapter
- ¿El uso del texto como clave principal en la tabla SQLite es incorrecto?
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