[Android] aprender a utilizar SQLite de datos de persistencia de la pluma de combate

Antes de que un período de tiempo, hacer un memorando sencilla de proyectos reales de APP, la primera vez que utiliza el SQLite para la persistencia de datos, estoy aquí para compartir una cierta comprensión de que también recuerdo a mí mismo, sino también con el fin de consolidar su propio conocimiento

 

En primer lugar, ¿por qué la persistencia de datos

 

Como nota, esperamos que cada vez que se abre después de cerrar APP, que escribió en el APP se pueden almacenar en algo abajo en lugar de perderse con el cierre de la APP algo similar, queremos que los datos almacenados en la memoria externa en lugar de disco duro la sensación

 

En segundo lugar, la necesidad de utilizar la clase definida SQLite uso simple o

 

1, el modelo de datos: para guardar la base de datos de lectura o escritura de datos en la base de datos
Memorando, por ejemplo, el modelo de datos es
Cada ID de nota

Cada contenido memo (contenido)

La importancia de cada memorando (1 importante, sin importancia 0)

 

2, una base de datos clase de proxy: por la simple conversión de una llamada de la llamada a la base de datos SQLite API APP
Corresponde a la operación básica de la base de datos encapsulados para que sea fácil de usar

 

3, las clases CursorAdapter: la clase que hereda de una manera abstracta Android proceso de acceso de datos estándar
Mi entendimiento es que proporciona PP de datos en el control de un puente entre la adquisición y la adquisición de datos en la base de datos

 


En tercer lugar, la aplicación del código, con el fin de combatir esta práctica Estaba proyecto como un ejemplo

 

El primero es el modelo de datos
getter omitidas y método setter para cada variable miembro

 

público  de clase Recordatorio {
     privada  int MID;
    privada mContent cadena;
    privada  int mImportent;
    público Recordatorio ( int ID, el contenido String, int importent) { 
        MID = Identificación; 
        mContent = contenido; 
        mImportent = importent; 
    }

 


A continuación, la clase de proxy de base de datos RemindersDbAdapter

 

La primera es la definición de una base de datos de algunas constantes, tales como el nombre de la biblioteca, de la tabla, número de versión, etc.

   pública estática final Cadena COL_ID = "_id" ; pública estática final Cadena COL_CONTENT = "contenido" ; pública estática final Cadena COL_IMPORTENT = "importent" ; // nombre de campo de indexación pública estática final int index_id = 0 ; pública estática final int INDEX_CONTENT = index_id . 1 + ; pública estática final int INDEX_IMPORTENT index_id + = 2 ; // para acceder TAG público estático Última cadena de etiqueta = "RemindersDbAdapter" ; // dos objetos de la API de base de datos, el primero para abrir y cerrar la base de datos, es una clase de ayuda privada DatabaseHelper mDbHelper; Privada SQLiteDatabase el MDB; // nombre de la biblioteca, de la tabla, nombre de la versión pública estática final Cadena = DATABASE_NAME "dba_remdrs" ; pública estática final cadena TABLE_NAME = "tbl_remdrs" ; pública estática final int Database_Version = 1 ; // objeto de contexto proporciona acceso al sistema Android privada final contexto mCtx; // sentencias SQL para crear la base de datos pública estático final de cadena DATABASE_CREATE = "CREATE TABLE si no existe" + TABLE_NAME + "(" + COL_ID + "INTEGER PRIMARY KEY AutoIncrement," + COL_CONTENT + "texto," + COL_IMPORTENT + "INTEGER);";

 

Descripción de la instrucción SQL

General de CREATE hace si no existe, si no en este error se unirá si no existe entonces la segunda pasada APP, ya que el mismo espectáculo está tratando de crear una nueva tabla y, a continuación, añadir la frase para mostrar sólo una advertencia, le pedirá a la tabla ya existe, sin error

Otro parámetro es  INTEGER PRIMARY KEY AutoIncrement, porque en SQLite, se añadirá un rowid para cada tabla, esto puede ser usado como un campo oculto, y porque el ID de fila de cada fila es única, por lo que puede tomar Identificación como la clave principal,  un tipo de datos de campo especificado como COL_ID INTEGER PRIMARY KEY AutoIncrement, dijo alias INTEGER clave principal para el incremento automático rowid, al insertar los datos, sólo tiene que especificar el valor del campo es nulo, será absorbida por motor valor establecido automáticamente

Además texto de la sentencia tipo de datos en SQLite se refiere a una combinación de texto, o texto y números, hasta 2 ^ 16 caracteres (de acceso es de 255 caracteres)


Abrir y cerrar la base de datos

//     abierta 
    pública  vacío abierto () lanza SQLException { 

        mDbHelper = nueva DatabaseHelper (mCtx); 

        MDB = mDbHelper.getWritableDatabase (); 

    } 

//     Cerrar 

    pública  vacío   close () { 

        si (mDbHelper =! Nula ) { 

            mDbHelper.close (); 

        } 

    }

 


Luego, alrededor de requesón (crear, leer, actualizar, eliminar) las operaciones para lograr

 

// escribirse por los datos de bases de datos directamente 

    pública  vacío createReminder (nombre de la cadena, booleano importent) { 

        valores ContentValues = nuevos nuevos ContentValues (); 

        values.put (COL_CONTENT, nombre); 

        values.put (COL_IMPORTENT, importent); 

        mDb.insert ( TABLE_NAME, nulos , valores); 

    } 

// escritura es realizada por el modelo de datos 
    pública  a largo createReminder (Recordatorio Recordatorio) { 

        ContentValues valores = nuevos nuevos ContentValues (); 

        ; values.put (COL_CONTENT, reminder.getContent ()) // nombre de la tarjeta de visita

        values.put (COL_IMPORTENT, reminder.getImportent ()); // Teléfono de contacto 

//         inseting fila 

        de retorno mDb.insert (TABLE_NAME nulos , valores); 

    } 

// 从数据库读取内容

    pública Recordatorio fetchReminderById ( int id) { 

        cursor Cursor = mDb.query (TABLE_NAME nueva String [] {COL_ID, 

                COL_CONTENT, COL_IMPORTENT}, COL_ID + "=?" , 

                Nueva String [] {String .valueOf (id)}, nulo , nulo , nulo , nulo ); 

        si (cursor! =nula ) 

            cursor.moveToFirst (); 

        volver  nuevo Recordatorio ( 

                cursor.getInt (index_id), 

                cursor.getString (INDEX_CONTENT), 

                cursor.getInt (INDEX_IMPORTENT)); 

    } 

    Públicas fetchAllReminders cursor () { 

        Cursor mCursor = mDb.query (TABLE_NAME, nuevo String [] {COL_ID, 

                        COL_CONTENT, COL_IMPORTENT}, 

                        nulo , nulo , nulo , nulo , nulo ); 

        si (! mCursor = nula ) { 

            mCursor.moveToFirst ();

        } 

        Devolver mCursor; 

    } 

//     更新数据库

    pública  vacío updataReminder (recordatorio Recordatorio) { 

        ContentValues valores = nuevos ContentValues (); 

        values.put (COL_CONTENT, reminder.getContent ()); 

        values.put (COL_IMPORTENT, reminder.getImportent ()); 

        mDb.update (TABLE_NAME valores, 

                COL_ID + "=?", nuevo String [] {String.valueOf (reminder.getId ())}); 

    } 

// 删除数据

    pública  vacío deleteReminderById ( int NID) { 

        mDb.delete (TABLE_NAME COL_ID + "=?",nuevo String [] {String.valueOf (NID)}); 

    } 

    Públicos  vacíos deleteAllReminders () { 

        mDb.delete (TABLE_NAME nulo , nulo ); 

    }

 

Descripción de los ContentValues

Es un datos de enlace, similar a una tabla hash, pares de valores clave se almacenan, pero ContentValues de Cadena de clave tipo y valor fue de tipos básicos (int, etc.), a través de su put () para poner la llave a

aproximadamente el cursor
del cursor cada fila es una colección, que utiliza moveToFirst () para localizar la primera fila, la necesidad de utilizar una consulta de base de datos en la definición de la función, los parámetros de la función de múltiples bits

Tipos de datos nombre del parámetro efecto
Boole distinto Es cierto, que cada pieza de datos es único, y viceversa
Cuerda mesa nombre de la tabla
Cuerda[] columnas Para devolver el nombre de la columna de la matriz (nombre de campo), devuelva todas las columnas es nulo
Cuerda selección La detección de la línea, similar a la WHERE de SQL
Cuerda[] selectionArg La selección aparece para el reemplazo?
Cuerda agrupar por La agrupación de la línea de retorno conjunto, un paquete nulo no es
Cuerda teniendo Cursor determinar qué filas se colocan en el filtro (no llegar a conocer)
Cuerda OrdenarPor Ordena, la clasificación predeterminado es nula de prensa
Cuerda límite Limitar el número de filas devueltas
CancellationSignal cancellationsignal Cuando la señal para cancelar la operación, no era nula, no serán arrojados en el OperationCanceledException cancelación

El que un total de cuatro parámetros de la función de consulta diferentes, 10 parámetros incluyen todos los parámetros anteriores, nueve parámetro no se incluye cancellationsignal, 8 argumento no contiene un argumento distinto y 7 cancellationsignal no contiene una distinta, limitar y cancellationsignal
sensación I mientras la función de consulta apreciará que el código se encuentra en las operaciones CRUD es muy fácil de entender


CursorAdapter clase
esta parte todavía necesita para digerir lo que en muchas actualizaciones posteriores

Supongo que te gusta

Origin www.cnblogs.com/Ringky/p/12446616.html
Recomendado
Clasificación