SQLite en el Caso

/ * <[CDATA [* / var asciidoc = {/ / Namespace!. / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Indice generador / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / * Autor: Mihai Bazon , septiembre de 2002 * http://students.infoiasi.ro/ ~ mishoo ** Tabla de generador de contenido * Versión: 0.4 ** Siéntase libre de utilizar esta secuencia de comandos en los términos de la GNU General Public License *, siempre y cuando lo hace no suprimir o alterar este aviso. * / / * Modificado por Troy D. Hanson, septiembre de 2006. Licencia: GPL * / / * modificado por Stuart Rackham, 2006, 2009. Licencia: GPL * / / / toclevels = 1 .. 4. toc: function (toclevels) {function getText (el) {var text = ""; for (var i = el.firstChild; i = null; i = i.nextSibling!) {if (== i.nodeType 3 / * Node.TEXT_NODE * /) / / IE no habla constantes. texto + = I.Data; else if (i.firstChild = null!) Texto + = getText (i);} texto return;} function TocEntry (el, texto, toclevel) {this.element = el; this.Text = texto; this.toclevel = toclevel;} tocEntries función (EL, toclevels) {var result = new Array; var re = new RegExp ('[HH] ([1 -' + (toclevels 1) + '])') / / Función que escanea el árbol DOM para elementos de encabezado (la API DOM2 / / NodeIterator sería una mejor técnica, pero no con el apoyo de todos / / los navegadores). iterate var = function (el) {for (var i = el.firstChild;! i = null; i = i.nextSibling) {if (== i.nodeType 1 / * Node.ELEMENT_NODE * /) {var = mo re . exec (i.tagName); if (mo && (i.getAttribute ("clase") | | i.getAttribute ("className")) = "float"!) {resultado [result.length] = new TocEntry (i , getText (i), mo [1] -1);} iteración (i);}}} iterate (el); return resultado;} var toc = document.getElementById ("toc"); if (toc) {! vuelta;} / / Eliminar entradas de la TDC existentes en caso de que estamos volviendo a cargar el TOC. var tocEntriesToRemove = []; var i; for (i = 0; i «+» «+ n «.» + + nota + «

«; var id = palmos [i] getAttribute («id»);. if (id = nulos!) refs [«#» + id] = n;}} si (n == 0) noteholder.parentNode.removeChild (Bonista); else {/ / Proceso footnoterefs. for (i = 0; i

Es muy común en las bases de datos SQLite para números enteros para representar un significado más profundo que su valor numérico. Solemos referirnos a esto como una bandera. Tome la call_history.db iOS por ejemplo: la llamada class=»monospaced»> tabla tiene una columna llamada literalmente y los números enteros en esa columna representa el tipo de llamada.

Entero Interpretación

4

entrante

5

saliente

8

class=»tableblock»>

16

Facetime

Nota Más valores son posibles que los de la tabla anterior. Los datos anteriores son precisos para iOS 6, pero no completa. Otros valores enteros son posibles que representan un error de red de algún tiempo, y si bien es posible determinar si la llamada era entrante, Facetime, etc, cuando se produjo el error, esto excede el alcance de este post.

tan comunes como las banderas de enteros es la absoluta falta de una explicación para ellos en la propia base de datos. Echa un vistazo a los esquemas de tablas:

<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http: / / www.lorenzobettini.it http://www.gnu.org/software/src-highlite ->

    Crear     MESA   _SqliteDatabaseProperties  (   clave    texto  ,   TEXTO  ,    ÚNICO    (   clave    ));  
CREAR MESA #0000FF"> style="color: ( ROWID INTEGER PRIMARIA CLAVE , TEXTO , fecha , Duración INTEGER , , nombre texto , TEXTO , TEXTO , leer , asistida INTEGER , BLOB , originalAddress texto );
Crear MESA ( ROWID INTEGER PRIMARIA CLAVE , , bytes_rcvd Real , , , bytes_last_sent , , );

Las mesas están esencialmente están solos-los datos class=»monospaced»> tabla no se unió a la llamada class=»monospaced»> Mesa para dar sentido a las banderas class=»monospaced»> enteros columna. Así que, ¿cómo determinar el significado? ¿Por qué, por medio de pruebas, por supuesto. Si pensabas utilizar otra herramienta y ver lo que , dice a continuación, salir a la calle y arrastrar sus nudillos en el concreto por un poco. Está bien, voy a esperar ….

El mejor recurso para el control de los valores de la bandera es la interfaz de usuario del dispositivo: conseguir un teléfono de prueba, exportar la base de datos, y comparar los registros mostrados a través de la interfaz de dispositivo a los valores de la tabla. Sí, usted tiene que hacer algo de trabajo, pero eso es como debe ser. Como mínimo, es necesario comprobar si la herramienta o consulta el manual es corret, ¿verdad? Por cierto, puede que se pregunte cómo la interfaz de usuario conoce la interpretación: la de la programación de aplicaciones, pero no llega a ver que debido a su

tanto, vamos a seguir adelante con la suposición de que hayamos comprobado la interfaz de usuario para esta base de datos o una base de datos misma generación y estamos seguros de la interpretación. ¿Podemos diseñar una sentencia SQL que puede realizar la interpretación para nosotros? ¡Por supuesto!

la expresión CASE

CASE es la expresión de las consultas IF / THEN SQL. La forma básica de la expresión es el siguiente (crédito : sqlite.org ):

  • CASO x CUANDO ENTONCES w1 w2 r1 CUANDO ENTONCES ELSE r2 r3 END

  • CASO CUANDO x = w1 entonces R1 cuando x = w2 ENTONCES ELSE r2 r3 END

Piense en el x de valor en las expresiones anteriores como el nombre de la columna. En lugar de tratar de explicar con más detalle con valores hipotéticos, permite dar marcha atrás a las banderas call_history.db. Podríamos utilizar el siguiente extracto de nuestra consulta:

<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite ->

  banderas de casos 
cuando 4 "Incoming"
5 y "saliente"
8 "Bloqueado "
16 " Facetime "
demás "Abandonado"
como flags

Nota Usamos el class=»monospaced»> alias en la final de la instrucción caso anterior a nombre de la columna de «banderas». Sin el alias, la columna tomaría el nombre de toda la declaración de caso

La declaración caso anterior esencialmente lee.: para la columna banderas, interpretar 4 como entrante , 5 como saliente , 8 como Bloqueado , 16 como Facetime , y cualquier otra cosa que disminuyen . Si estuviéramos interesados ​​en el resultado de la producción de call_history.db que incluía el rowid, número de teléfono, fecha, duración de la llamada, y el tipo de llamada, podríamos utilizar la siguiente consulta:

<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src- highlite ->

    seleccione   
rowid ,
,
datetime ( fecha , 'unixepoch' , 'localtime' ) como fecha ,
, banderas de casos />
4 "Incoming"
5 "saliente"
cuando 8 "Bloqueado"
16 "Facetime"

final "Abandonado" como /> de llamada

Nuestra producción se vería como la siguiente:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *