Revista Tecnología

7 Tareas comunes que echamos de menos en SQLite si venimos de otra base de datos SQL.

Publicado el 08 agosto 2016 por Gaspar Fernández Moreno @gaspar_fm

Tareas comunes echamos menos SQLite venimos otra base datos SQL.7 Tareas comunes que echamos de menos en SQLite si venimos de otra base de datos SQL.

Si en nuestra aplicación utilizamos una base de datos SQLite pero no estamos muy familiarizamos con la forma de trabajar de este pequeño motor, esta es tu guía. Aunque SQL es el mismo para muchas bases de datos (sobre todo las que tienen estas tres letras en su nombre: MSSQL, MySQL, PostgreSQL...), siempre hay unas pequeñas diferencias.
Esto no es una guía completa de SQL ite, sólo una pequeña chuleta para algunas tareas comunes que pueden traernos de cabeza. Para los ejemplos, he utilizado algunas bases de datos SQLite de Firefox. Aunque otros programas como Skype, Dropbox, Thunderbird, muchísimos programas de Android... también usan SQLite.

Saber las tablas de una base de datos

Si estamos en el cliente SQLite oficial podemos escribir:


Aunque si estamos programando una aplicación, debemos utilizar otra consulta:

Describir una tabla

O saber cómo está formada, qué campos tiene, qué tipos de datos maneja... para SQLite. Cuando queremos hacer una petición a una tabla en este sistema y debemos saber cómo se llaman los campos que queremos pedir. Podemos hacer en el cliente de SQLite:


Incluso lo podemos hacer con la tabla sqlite_master (la que tiene información sobre las tablas):

CREATE TABLE sqlite_master (

Otras formas de pedir esta información pueden ser:

PRAGMA table_info(moz_places);

3|rev_host|LONGVARCHAR|0||0

4|visit_count|INTEGER|0|0|0

7|favicon_id|INTEGER|0||0

8|frecency|INTEGER|1|-1|0

9|last_visit_date|INTEGER|0||0

11|foreign_count|INTEGER|1|0|0


Devolviéndonos un elemento por fila con los datos (ID de Columna, nombre, tipo, si puede ser NULL, valor por defecto, y si es clave primaria.

También podemos hacer otra cosa:

Conocer el último ID insertado

En SQLite, a no ser que se diga lo contrario, siempre tendremos un ID de fila para cada una de las filas que insertemos en cada tabla. Este Id de fila (o ROWID) no es visible si hacemos un SELECT * FROM tabla, aunque si podríamos hacer un SELECT rowid,* FROM tabla. Este ID identifica de forma unívoca una fila dentro de una tabla. Así evitamos tener que hacerlo nosotros, por ejemplo. En muchos sistemas de base de datos, podemos obtener el último ID insertado en una tabla, y aquí también. Si por ejemplo en una tabla hacemos:

SELECT last_insert_rowid();


Si queremos probarlo con el SELECT de antes sobre la misma tabla, veremos que el último dato tiene un ROWID 4.

NOW() fecha y hora actual

Si queremos plasmar la fecha actual en un campo de la base de datos, en muchos sistemas de base de datos SQL encontramos la función NOW(), aunque no en SQLite. Pero tenemos otra forma de sacar ese mismo dato:

Aunque también tenemos algunas posibilidades muy chulas como por ejemplo utilizar strftime() para dar la fecha en el formato que queramos, o la posibilidad de hacer operaciones con la fecha, como se indica a continuación:

12:27 08/08/2016 (1470659251)

SELECT datetime('now', '+1 month');

Permitiéndonos muchas posibilidades. Por cierto, date(), datetime() y time() llaman internamente a strftime() por lo que strftime() puede ser utilizada con todos los modificadores que queramos.

Formateando la salida del SELECT

El cliente de SQLite permite obtener la salida formateada de diferentes maneras. Y eso es muy útil si utilizamos SQLite en nuestros scripts.

---------- --------------------------------------------- ------------

SELECT * FROM moz_hosts LIMIT 4;

id,host,frecency,typed,prefix

4,answers.launchpad.net,128,0,

Y muchos modos más si utilizamos .help

Obtener la versión con una consulta

Aunque tanto desde su interfaz C como desde el cliente, podemos obtener la versión de SQLite, puede que alguna vez necesitemos una consulta para ello, o para obtener esta versión junto con más cosas. Podemos hacerlo así:

Formatear columnas

¿Y si, formateamos columnas como si estuviéramos programando en C? A partir de SQLite 3.8.3 (2014) podemos utilizar la función printf() en nuestras consultas y hacer cosas tan chulas como:

SELECT printf('%05d', 123);

SELECT printf ('%09.4f', 43.23);

SELECT printf ('%X', 12380);


Y esto tiene muchas más posibilidades que un CONCAT().

Foto Principal: Chris Dlugosz


Volver a la Portada de Logo Paperblog