Hay dos formas de agregar, eliminar, modificar y consultar la base de datos en Android, ¿cuáles están en la clase sqlitedatabase?
1. Utilice la base de datos SQLite relacional incorporada para almacenar datos.
En la plataforma Android, se integra una base de datos relacional SQLite3 que admite números NULL, INTEGER, REAL (punto flotante). ), tipos de datos TEXT (texto de cadena) y BLOB (objeto binario). Aunque solo admite cinco tipos, de hecho sqlite3 también acepta varchar(n), char(n), decimal(p,s) y otros tipos de datos, pero. se convertirá en los cinco tipos de datos correspondientes durante la operación o el guardado. La característica más importante de SQLite es que puede guardar varios tipos de datos en cualquier campo, independientemente del tipo de datos declarado en el campo. Por ejemplo, puede almacenar una cadena en un campo entero, un número de punto flotante en un campo booleano o un valor de fecha en un campo de carácter. Hay una excepción: los campos definidos como INTEGER PRIMARY KEY solo pueden almacenar números enteros de 64 bits. Al guardar datos que no sean números enteros en dichos campos, se producirá un error. Además, al escribir una instrucción CREATE TABLE, puede omitir la información del tipo de datos que sigue al nombre del campo. Por ejemplo, en la siguiente instrucción, puede omitir la información del tipo del campo de nombre:
CREATE TABLE. persona (personid entero clave primaria autoincrement, nombre varchar(20))
SQLite puede analizar la mayoría de las declaraciones SQL estándar, como:
Copie el código de la siguiente manera:
Declaración de consulta: seleccione * del nombre de la tabla donde la cláusula condicional grupo por cláusula de agrupación que tiene ... orden por cláusula de clasificación
Por ejemplo: seleccione * de la persona
seleccione * de la persona ordenar por id desc
seleccione el nombre del grupo de personas por nombre que tenga recuento(*)>1
El SQL de paginación es similar a mysql. La siguiente declaración SQL obtiene 5 registros y omite el primero. 3 registros
seleccione * del límite de cuenta 5 compensación 3 o seleccione * del límite de cuenta 3,5
Insertar declaración: insertar en el nombre de la tabla (lista de campos) valores (lista de valores ). Por ejemplo: insertar en valores de persona (nombre, edad) ('chuanzhi',3)
Declaración de actualización: actualizar nombre de tabla establecer nombre de campo = valor donde cláusula de condición. Por ejemplo: actualizar nombre del conjunto de personas=‘chuanzhi‘ donde id=10
Eliminar declaración: eliminar del nombre de la tabla donde cláusula condicional. Por ejemplo: eliminar de la persona donde id=10
2. Utilice SQLiteOpenHelper para versionar la base de datos
Cuando escribimos software de aplicación de base de datos, debemos considerar estas cuestiones: Porque desarrollamos The El software se puede instalar en los teléfonos móviles de muchos usuarios. Si la aplicación utiliza una base de datos SQLite, debemos crear la estructura de la tabla de la base de datos utilizada por la aplicación y agregar algunos registros de inicialización cuando el usuario usa el software por primera vez. actualizado, también es necesario actualizar la estructura de la tabla de datos.
Entonces, ¿cómo podemos crear automáticamente las tablas de la base de datos requeridas por la aplicación en el teléfono móvil del usuario cuando el usuario usa o actualiza el software por primera vez? No podemos permitirnos crear manualmente tablas de bases de datos en cada teléfono móvil que necesite instalar este software, ¿verdad? Debido a que todas las aplicaciones de bases de datos enfrentan este requisito, el sistema Android nos proporciona una clase abstracta llamada SQLiteOpenHelper, que debe heredarse antes de poder usarse. Logra lo que se propuso anteriormente al administrar las necesidades de la versión de la base de datos.
Para administrar la versión de la base de datos, la clase SQLiteOpenHelper proporciona dos métodos importantes, a saber, onCreate(SQLiteDatabase db) y onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion. El primero se usa por primera vez). La tabla de la base de datos se genera cuando se instala el software y esta última se utiliza para actualizar la estructura de la tabla de la base de datos al actualizar el software. Al llamar al método getWritableDatabase () o getReadableDatabase () de SQLiteOpenHelper para obtener la instancia de SQLiteDatabase utilizada para operar la base de datos, si la base de datos no existe, el sistema Android generará automáticamente una base de datos y luego llamará al método onCreate (). El método onCreate() se genera por primera vez. Solo se llamará al ingresar a la base de datos. En el método onCreate(), puede generar la estructura de la tabla de la base de datos y agregar algunos datos de inicialización utilizados por la aplicación. Se llamará al método onUpgrade () cuando cambie la versión de la base de datos. Generalmente, el número de versión debe cambiarse solo cuando se actualiza el software. La versión de la base de datos está controlada por el programador. Debido a cambios comerciales, la estructura de la tabla de la base de datos se ha modificado. En este momento, es necesario actualizar el software. Al actualizar el software, desea actualizar la estructura de la tabla de la base de datos en el teléfono móvil del usuario. puede configurar la versión de la base de datos original en 2 (algunos estudiantes preguntaron si configurarla en 3 funcionará). Por supuesto, si lo desea, puede configurarla en 100) y actualizar la estructura de la tabla en el método onUpgrade(). Cuando la versión del software se ha actualizado mucho, el método onUpgrade() se puede utilizar para juzgar en función del número de versión original y el número de versión de destino, y luego realizar las actualizaciones correspondientes de la estructura de la tabla y los datos.
Tanto el método getWritableDatabase() como el método getReadableDatabase() pueden obtener una instancia de SQLiteDatabase utilizada para operar la base de datos. Sin embargo, el método getWritableDatabase() abre la base de datos en modo lectura-escritura. Una vez que el espacio en disco de la base de datos está lleno, la base de datos solo se puede leer pero no escribir. Si usa getWritableDatabase() para abrir la base de datos, se producirá un error. ocurrir. El método getReadableDatabase () primero abre la base de datos en modo lectura-escritura. Si el espacio en disco de la base de datos está lleno, la apertura fallará. Cuando la apertura falle, continuará intentando abrir la base de datos en modo de solo lectura.
Nota: La diferencia entre getWritableDatabase() y getReadableDatabase es que cuando la base de datos está llena, llamar al primero informará un error, llamar al segundo no, por lo que si no estás actualizando la base de datos, es Lo mejor es llamar a este último para obtener una conexión a la base de datos.
Código:
Copia el código de la siguiente manera:
public class DatabaseHelper extends SQLiteOpenHelper {
//No se puede crear una instancia de la clase. Utilizado como parámetro del constructor de la clase principal, debe declararse estático
private static final String name = "ljqdb" // Nombre de la base de datos
private static final int version = 1; ; / /Versión de la base de datos
public DatabaseHelper(Context context) {
//El tercer parámetro CursorFactory especifica la clase de fábrica para obtener una instancia de cursor al ejecutar la consulta. null, lo que significa usar la clase de fábrica predeterminada del sistema
super(context, name, null, version);
}
@Override
public void onCreate (SQLiteDatabase db) {
db.execSQL("CREAR TABLA SI NO EXISTE persona (
personid entero clave primaria autoincremento, nombre varchar(20), edad INTEGER) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db. execSQL(" ALTER TABLE persona AGREGAR teléfono VARCHAR(12) NULL "); //Agregar una columna a la tabla
// DROP TABLE IF EXISTS persona eliminar la tabla
}
}
En el desarrollo de proyectos reales, cuando se actualiza la estructura de la tabla de la base de datos, se debe evitar la pérdida de datos del usuario almacenados en la base de datos.
3. Utilice SQLiteDatabase para operar la base de datos SQLite
Android proporciona una clase llamada SQLiteDatabase, que encapsula algunas API para operar bases de datos. Puede utilizar esta clase para agregar datos (Crear) y realizar consultas. Operaciones (Recuperar), actualizar (Actualizar) y eliminar (Eliminar) (estas operaciones se denominan CRUD para abreviar). Para aprender SQLiteDatabase, debemos centrarnos en dominar los métodos execSQL() y rawQuery(). El método execSQL() puede ejecutar sentencias SQL con comportamiento cambiante, como insertar, eliminar, actualizar y CREAR TABLA. El método rawQuery() se utiliza para ejecutar sentencias de selección.
Ejemplo de uso del método execSQL():
Copia el código de la siguiente manera:
SQLiteDatabase db = ....;
db .execSQL("insertar en persona(nombre, edad) valores('Lin Jiqin', 24)");
db.close();
Ejecutando el SQL anterior La declaración agregará un registro a la tabla de personas. En aplicaciones prácticas, los valores de los parámetros de "Lin Jiqin" en la declaración serán proporcionados por la interfaz de entrada del usuario si el contenido ingresado por el usuario se ensambla en lo anterior. inserte la declaración tal como está, cuando el usuario ingresa Cuando el contenido de contiene comillas simples, habrá errores de sintaxis en la declaración SQL ensamblada.
Para resolver este problema, debe eliminar las comillas simples, es decir, convertir las comillas simples en dos comillas simples. A veces, los usuarios suelen ingresar símbolos SQL especiales como "&". Para garantizar que la sintaxis de la declaración SQL ensamblada sea correcta, estos símbolos SQL especiales en la declaración SQL deben tener escape. Obviamente, cada declaración SQL debe tener escape. El trabajo de procesamiento es relativamente engorroso. La clase SQLiteDatabase proporciona un método execSQL (String sql, Object [] bindArgs) sobrecargado. El uso de este método puede resolver los problemas mencionados anteriormente, porque este método admite el uso de parámetros de marcador de posición (?). Los ejemplos de uso son los siguientes:
Copie el código de la siguiente manera:
SQLiteDatabase db = ....;
db.execSQL("insert into person( nombre, edad) valores(?,?)", nuevo Objeto[]{" Chuanzhi Podcast", 4});
db.close();
execSQL(String sql , Objeto El primer parámetro del método [] bindArgs) es la declaración SQL, y el segundo parámetro es el valor del parámetro de marcador de posición en la declaración SQL. El orden de los valores de los parámetros en la matriz debe corresponder a la posición de. el marcador de posición.
El rawQuery() de SQLiteDatabase se utiliza para ejecutar la instrucción select. El ejemplo de uso es el siguiente:
Copie el código de la siguiente manera:
SQLiteDatabase db. = ....;
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
int personid = cursor .getInt(0); //Obtiene el valor de la primera columna, el índice de la primera columna comienza desde 0
String name = cursor.getString(1); /Obtener el valor de la segunda columna
p>int age = cursor.getInt(2);//Obtener el valor de la tercera columna
}
cursor.close();
db.close();
El primer parámetro del método rawQuery() es la instrucción select, el segundo parámetro es el valor del marcador de posición; parámetro en la declaración de selección, si la declaración de selección no utiliza marcadores de posición, este parámetro se puede establecer en nulo. Ejemplos de uso de declaraciones select con parámetros de marcador de posición son los siguientes:
Copie el código de la siguiente manera:
Cursor cursor = db.rawQuery("select * from person where name like ? and age =?", new String[]{"% Lin Jiqin%", "4"});
Cursor es un cursor de conjunto de resultados, utilizado para acceso aleatorio al conjunto de resultados. Si está familiarizado con jdbc, de hecho, Cursor es muy similar a ResultSet en JDBC. Utilice el método moveToNext() para mover el cursor de la fila actual a la siguiente fila. Si se ha movido la última fila del conjunto de resultados, el resultado devuelto es falso; de lo contrario, es verdadero. Además, Cursor también tiene el método moveToPrevious() de uso común (que se utiliza para mover el cursor de la fila actual a la fila anterior. Si ha pasado de la primera fila del conjunto de resultados, el valor de retorno es falso; de lo contrario, es verdadero), el método moveToFirst() (se usa para mover el cursor a la primera fila del conjunto de resultados; si el conjunto de resultados está vacío, el valor de retorno es falso; de lo contrario, es verdadero) y el método moveToLast() (usado para mover el cursor). a la última fila del conjunto de resultados, si el conjunto de resultados está vacío, el valor de retorno es falso; de lo contrario, es verdadero).
Además de los métodos execSQL() y rawQuery() que le presentamos anteriormente, SQLiteDatabase también proporciona específicamente métodos de operación correspondientes a agregar, eliminar, actualizar y consultar: insertar(), eliminar(), actualizar ( ) y consulta(). Estos métodos son en realidad para aquellos principiantes que no saben mucho sobre la sintaxis SQL. Para los programadores que están familiarizados con la sintaxis SQL, pueden completar la adición, eliminación y actualización de datos utilizando directamente los métodos execSQL () y rawQuery () para ejecutar. Sentencias SQL, operación de consulta.