¿No sabes por dónde empezar? Ayúdanos normalizando artículos.
¿Tienes experiencia? Crea alguno de estos artículos de actualidad.

Diferencia entre revisiones de «SQLite»

 
(No se muestran 12 ediciones intermedias de 4 usuarios)
Línea 2: Línea 2:
 
|nombre=SQLite
 
|nombre=SQLite
 
|familia=
 
|familia=
|imagen=sqlite.png
+
|imagen=Sqlite370_banner.gif
 
|tamaño=
 
|tamaño=
 
|descripción=Sistema de gestión de bases de de datos
 
|descripción=Sistema de gestión de bases de de datos
Línea 12: Línea 12:
 
|diseñador=
 
|diseñador=
 
|modelo de desarrollo=
 
|modelo de desarrollo=
|lanzamiento inicial=
+
|lanzamiento inicial=29 de mayo, 2009
 
|versiones=
 
|versiones=
|última versión estable=
+
|última versión estable=3.7.6.1 (14 de abril, 2011)
 
|género=Biblioteca de C++
 
|género=Biblioteca de C++
 
|sistemas operativos=Multiplataforma
 
|sistemas operativos=Multiplataforma
Línea 21: Línea 21:
 
|premios=
 
|premios=
 
|web=http://www.sqlite.org
 
|web=http://www.sqlite.org
}}
+
}}  
  
'''SQLite''' es una biblioteca escrita en leguaje [[C]] que implementa un [[sistema de gestión de bases de datos]] transaccionales [[SQL]] auto-contenido, sin servidor y sin configuración. El código de SQLite es de dominio público y libre para cualquier uso, ya sea comercial o privado. Actualmente es utilizado en gran cantidad de aplicaciones incluyendo algunas desarrolladas como proyectos de alto nivel.
+
'''SQLite''' es una biblioteca escrita en [[lenguaje C]] que implementa un [[sistema de gestión de bases de datos]] transaccionales [[SQL]] auto-contenido, sin servidor y sin configuración. El código de SQLite es de dominio público y libre para cualquier uso, ya sea comercial o privado. Actualmente es utilizado en gran cantidad de aplicaciones incluyendo algunas desarrolladas como proyectos de alto nivel.  
  
== Historia ==
+
== Historia ==
  
Cuando [[D. Richard Hipp]] trabajaba desarrollando [[software]] para la fuerza naval de los [[Estados Unidos]], comenzó a desarrollar SQLite, según él por una necesidad personal para su uso personal. En [[enero]] de 2000 D. Richard Hipp estaba trabajando con su equipo de la General Dynamics en la Fuerza naval de los Estados Unidos, en un proyecto de software, el cual se conectaba a una base de datos
+
Cuando [[D. Richard Hipp]] trabajaba desarrollando [[Software]] para la fuerza naval de los [[Estados Unidos]], comenzó a desarrollar SQLite, según él por una necesidad personal para su uso personal. En [[Enero]] de 2000 D. Richard Hipp estaba trabajando con su equipo de la General Dynamics en la Fuerza naval de los Estados Unidos, en un proyecto de software, el cual se conectaba a una base de datos Informix, el motor funcionaba muy bien, pero habían tenido problemas para hacer una reconfiguración cuando el sistema se reiniciaba. Luego cambiaron a PostgreSQL, pero administrar la base de datos era un poco más complejo. Fue en ese momento cuando surgió la idea de escribir un simple motor de base de datos SQL que permitiera leer los archivos del disco duro, y luego ser llamados en diferentes solicitudes.  
Informix, el motor funcionaba muy bien, pero habían tenido problemas para hacer una reconfiguración cuando el sistema se reiniciaba. Luego cambiaron a PostgreSQL, pero administrar la base de datos era un poco más complejo. Fue en ese momento cuando surgió la idea de escribir un simple motor de base de datos SQL que permitiera leer los archivos del disco duro, y luego ser llamados en diferentes solicitudes.
 
  
Cinco meses más tarde comenzó a escribir las primeras versiones de lo que se conoce hoy como SQLite, con el pensamiento de que sería útil en algún problema similar.
+
Cinco meses más tarde comenzó a escribir las primeras versiones de lo que se conoce hoy como SQLite, con el pensamiento de que sería útil en algún problema similar. A diferencia de los sistemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción.  
A diferencia de los sistemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de
 
base de datos al principio de cada transacción.  
 
  
 
En su versión 3, SQLite permite bases de datos de hasta 2 Terabytes de tamaño, y también permite la inclusión de campos tipo BLOB. El autor de SQLite ofrece formación, contratos de soporte técnico y características adicionales como compresión y cifrado.  
 
En su versión 3, SQLite permite bases de datos de hasta 2 Terabytes de tamaño, y también permite la inclusión de campos tipo BLOB. El autor de SQLite ofrece formación, contratos de soporte técnico y características adicionales como compresión y cifrado.  
  
== Características ==
+
== Características ==
  
 
SQLite es un sistema completo de bases de datos que soporta múltiples tablas, índices, triggers y vistas. No necesita un proceso separado funcionando como servidor ya que lee y escribe directamente sobre archivos que se encuentran en el disco duro. El formato de la base de datos es multiplataforma e indistintamente se puede utilizar el mismo archivo en sistemas de 32 y 64 bits.  
 
SQLite es un sistema completo de bases de datos que soporta múltiples tablas, índices, triggers y vistas. No necesita un proceso separado funcionando como servidor ya que lee y escribe directamente sobre archivos que se encuentran en el disco duro. El formato de la base de datos es multiplataforma e indistintamente se puede utilizar el mismo archivo en sistemas de 32 y 64 bits.  
  
La base de datos se almacena en un único fichero a diferencia de otros DBMS que hacen uso de varios archivos. SQLite emplea registros de tamaño variable de forma tal que se utiliza el espacio en disco que es realmente necesario en cada momento.
+
La base de datos se almacena en un único fichero a diferencia de otros DBMS que hacen uso de varios archivos. SQLite emplea registros de tamaño variable de forma tal que se utiliza el espacio en disco que es realmente necesario en cada momento.  
  
El código fuente está pensado para que sea entendido y accesible por programadores promedio. Todas las funciones y estructuras están bien documentadas.
+
El código fuente está pensado para que sea entendido y accesible por programadores promedio. Todas las funciones y estructuras están bien documentadas.  
  
Existe un programa independiente de nombre sqlite que puede ser utilizado para consultar y gestionar los ficheros de base de datos SQLite. También sirve como ejemplo para la escritura de aplicaciones utilizando la biblioteca SQLite.
+
Existe un programa independiente de nombre sqlite que puede ser utilizado para consultar y gestionar los ficheros de base de datos SQLite. También sirve como ejemplo para la escritura de aplicaciones utilizando la biblioteca SQLite.  
  
=== Implementación de SQL ===
+
=== Implementación de SQL ===
  
La biblioteca implementa la mayor parte del estándar [[SQL-92]], incluyendo transacciones de base de datos atómicas, consistencia de base de datos, aislamiento, y durabilidad (ACID), [[Trigger|triggers]] y la mayor parte de las [[Consulta SQL|consultas]] complejas.
+
La biblioteca implementa la mayor parte del estándar [[SQL-92]], incluyendo transacciones de base de datos atómicas, consistencia de base de datos, aislamiento, y durabilidad (ACID), [[Trigger|triggers]] y la mayor parte de las [[Consulta SQL|consultas]] complejas.  
  
==== Características omitidas de SQL ====
+
==== Características omitidas de SQL ====
  
 
*Restricciones FOREIGN KEY,  
 
*Restricciones FOREIGN KEY,  
*Soporte completo para triggers (disparadores)
+
*Soporte completo para triggers (disparadores)  
*Soporte completo para ALTER TABLE, solamente implementa las instrucciones RENAME TABLE y ADD COLUMN.
+
*Soporte completo para ALTER TABLE, solamente implementa las instrucciones RENAME TABLE y ADD COLUMN.  
*RIGHT y FULL OUTER JOIN, sólo está implementada la instrucción LEFT OUTER JOIN.
+
*RIGHT y FULL OUTER JOIN, sólo está implementada la instrucción LEFT OUTER JOIN.  
*Escribir en VIEWs, ya que las vistas en SQLite son de sólo lectura.
+
*Escribir en VIEWs, ya que las vistas en SQLite son de sólo lectura.  
 
*GRANT y REVOKE, pues no tienen sentido en un sistema de bases de datos embebido.
 
*GRANT y REVOKE, pues no tienen sentido en un sistema de bases de datos embebido.
  
=== Tipos de datos ===
+
=== Tipos de datos ===
  
 
SQLite usa un sistema de tipos inusual. En lugar de asignar un tipo a una columna como en la mayor parte de los sistemas de bases de datos SQL, los tipos se asignan a los valores individuales.  
 
SQLite usa un sistema de tipos inusual. En lugar de asignar un tipo a una columna como en la mayor parte de los sistemas de bases de datos SQL, los tipos se asignan a los valores individuales.  
  
Cada uno de los datos almacenados en una base de datos SQLite implemtenta alguno de los siguientes tipos:
+
Cada uno de los datos almacenados en una base de datos SQLite implemtenta alguno de los siguientes tipos:  
*NULL, un valor nulo.
+
 
*INTEGER, un entero con signo que se almacena en 1, 2, 3, 4, 5, 6 o 8 bytes de acuerdo a la magnitud del valor.
+
*NULL, un valor nulo.  
*REAL, un número de coma flotante (real), almacenado en 8 bytes.
+
*INTEGER, un entero con signo que se almacena en 1, 2, 3, 4, 5, 6 o 8 bytes de acuerdo a la magnitud del valor.  
*TEXT, una cadena de texto almacenada con las codificaciones UTF-8, UTF-16BE o UTF-16-LE.
+
*REAL, un número de coma flotante (real), almacenado en 8 bytes.  
 +
*TEXT, una cadena de texto almacenada con las codificaciones UTF-8, UTF-16BE o UTF-16-LE.  
 
*BLOB, datos en formato binario, se almacenan exactamente como se introdujeron.
 
*BLOB, datos en formato binario, se almacenan exactamente como se introdujeron.
  
==== Autoincremento ====
+
==== Autoincremento ====
Una duda tradicional es el modo de implementar el autoincremento, principalmente para las llaves primarias. La forma más sencilla es declarar el tipo de dato como INTEGER PRIMARY KEY.
+
 
 +
Una duda tradicional es el modo de implementar el autoincremento, principalmente para las llaves primarias. La forma más sencilla es declarar el tipo de dato como INTEGER PRIMARY KEY.  
 +
 
 +
=== Concurrencia  ===
  
=== Concurrencia ===
+
Varios procesos o hilos pueden acceder a la misma base de datos sin problemas. Varios accesos de lectura pueden ser servidos en paralelo. Un acceso de escritura sólo puede ser servido si no se está sirviendo ningún otro acceso concurrentemente.  
Varios procesos o hilos pueden acceder a la misma base de datos sin problemas. Varios accesos de lectura pueden ser servidos en paralelo. Un acceso de escritura sólo puede ser servido si no se está sirviendo ningún otro
 
acceso concurrentemente.
 
  
== Ventajas ==
+
== Ventajas ==
  
*Tamaño: SQLite tiene una pequeña memoria y una única biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.
+
*Tamaño: SQLite tiene una pequeña memoria y una única biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.  
*Rendimiento de base de datos: SQLite realiza operaciones de manera eficiente y es más rápido que [[MySQL]] y [[PostgreSQL]].
+
*Rendimiento de base de datos: SQLite realiza operaciones de manera eficiente y es más rápido que [[MySQL]] y [[PostgreSQL]].  
*Portabilidad: se ejecuta en muchas plataformas y sus bases de datos pueden ser fácilmente portadas sin ninguna configuración o administración.
+
*Portabilidad: se ejecuta en muchas plataformas y sus bases de datos pueden ser fácilmente portadas sin ninguna configuración o administración.  
*Estabilidad: SQLite es compatible con ACID, reunión de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.  
+
*Estabilidad: SQLite es compatible con [[ACID]], reunión de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.  
*SQL: implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub-consultas, generación de usuarios, vistas y triggers.
+
*SQL: implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub-consultas, generación de usuarios, vistas y triggers.  
*Interfaces: cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Ruby, Tcl, groovy, etc.
+
*Interfaces: cuenta con diferentes interfaces del API, las cuales permiten trabajar con [[C++]], [[PHP]], [[Perl]], [[Python]], [[Ruby]], [[Tcl]], [[Groovy]], [[Qt]] ofrece el [[Plugin|plugin]] qsqlite, etc.  
 
*Costo: SQLite es de dominio público, y por tanto, es libre de utilizar para cualquier propósito sin costo y se puede redistribuir libremente.
 
*Costo: SQLite es de dominio público, y por tanto, es libre de utilizar para cualquier propósito sin costo y se puede redistribuir libremente.
  
== Usos aconsejados de SQLite ==
+
== Usos aconsejados de SQLite ==
  
*Formato de archivo de aplicaciones.
+
*Formato de archivo de aplicaciones.  
*Aplicaciones desktop.
+
*Aplicaciones desktop.  
*Bases de datos para dispositivos.
+
*Bases de datos para dispositivos.  
*Bases de datos de sitios web de pequeño y mediano tamaño.
+
*Bases de datos de sitios web de pequeño y mediano tamaño.  
 
*Enseñanza.
 
*Enseñanza.
  
== Usos no aconsejados de SQLite ==
+
== Usos no aconsejados de SQLite ==
  
*Aplicaciones [[cliente-servidor]].
+
*Aplicaciones [[Cliente-servidor]].  
*Sitios web con gran cantidad de transacciones.
+
*Sitios web con gran cantidad de transacciones.  
*Bases de datos muy grandes (SQLite soporta hasta 2 terabytes).
+
*Bases de datos muy grandes (SQLite soporta hasta 2 terabytes).  
 
*Alta concurrencia.
 
*Alta concurrencia.
  
== Aplicaciones que utilizan SQLite ==
+
== Aplicaciones que utilizan SQLite ==
  
*[[Photoshop Lightroom]] ([[Adobe]])
+
*[[Photoshop Lightroom]] ([[Adobe]])  
*[[Adobe Reader]] ([[Adobe]])
+
*[[Adobe Reader]] ([[Adobe]])  
*[[Mac OS-X]] ([[Apple]])
+
*[[Mac OS-X]] ([[Apple]])  
*[[Firefox]] ([[Mozilla]])
+
*[[Firefox]] ([[Mozilla]])  
*[[Android]] ([[Google]])
+
*[[Android]] ([[Google]])  
 
*[[Solaris 10]] ([[Sun]])
 
*[[Solaris 10]] ([[Sun]])
  
== Ejemplos de uso de SQLite ==
+
== Ejemplos de uso de SQLite ==
=== TCL ===
+
 
<syntaxhighlight lang="bash">
+
=== TCL ===
 +
<syntaxhighlight lang='bash'>
 
#!/usr/bin/tclsh
 
#!/usr/bin/tclsh
 
if {$argc!=2} {
 
if {$argc!=2} {
  puts stderr "Usage: %s DATABASE SQL-STATEMENT"
+
    puts stderr "Usage: %s DATABASE SQL-STATEMENT"
  exit 1
+
    exit 1
 
}
 
}
 
load /usr/lib/tclsqlite3.so Sqlite3
 
load /usr/lib/tclsqlite3.so Sqlite3
 
sqlite3 db [lindex $argv 0]
 
sqlite3 db [lindex $argv 0]
 
db eval [lindex $argv 1] x {
 
db eval [lindex $argv 1] x {
  foreach v $x(*) {
+
    foreach v $x(*) {
    puts "$v = $x($v)"
+
        puts "$v = $x($v)"
  }
+
    }
  puts ""
+
    puts ""
 
}
 
}
 
db close
 
db close
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== C ===
+
=== C ===
<syntaxhighlight lang="cpp">
+
<syntaxhighlight lang='c'>
 
#include <stdio.h>
 
#include <stdio.h>
 
#include <sqlite3.h>
 
#include <sqlite3.h>
  
 
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
 
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
+
int i;
  for(i=0; i<argc; i++){
+
for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
+
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
+
}
  printf("\n");
+
printf("\n");
  return 0;
+
return 0;
 
}
 
}
  
 
int main(int argc, char **argv){
 
int main(int argc, char **argv){
  sqlite3 *db;
+
sqlite3 *db;
  char *zErrMsg = 0;
+
char *zErrMsg = 0;
  int rc;
+
int rc;
  
  if( argc!=3 ){
+
if( argc!=3 ){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
+
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
+
exit(1);
  }
+
}
  rc = sqlite3_open(argv[1], &db);
+
rc = sqlite3_open(argv[1], &db);
  if( rc ){
+
if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
+
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
+
sqlite3_close(db);
    exit(1);
+
exit(1);
  }
+
}
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
+
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
+
if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
+
fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
+
sqlite3_free(zErrMsg);
  }
+
}
  sqlite3_close(db);
+
sqlite3_close(db);
  return 0;
+
return 0;
 
}
 
}
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Aplicaciones para el trabajo con bases de datos SQLite ==
+
== Aplicaciones para el trabajo con bases de datos SQLite ==
  
*[http://www.osenxpsuite.net SQLite2009 Pro]
+
*[http://www.osenxpsuite.net SQLite2009 Pro]  
*[http://www.sqliteexpert.com/ SQLite Expert Personal]
+
*[http://www.sqliteexpert.com/ SQLite Expert Personal]  
 
*[http://sourceforge.net/projects/sqlitemanager/files/sqlitemanager/1.2.4/SQliteManager-1.2.4.tar.gz/download SQLiteManager]
 
*[http://sourceforge.net/projects/sqlitemanager/files/sqlitemanager/1.2.4/SQliteManager-1.2.4.tar.gz/download SQLiteManager]
  
== Enlaces externos ==
+
== Enlaces externos ==
  
*[http://www.sqlite.org/download.html Descargas desde el sitio oficial]
+
*[http://www.sqlite.org/download.html Descargas desde el sitio oficial]  
*[http://www.sqlite.org/download.html Descargas desde el sitio oficial]
+
*[http://www.sqlite.org/cintro.html Introducción a la interfaz C/C++]  
*[http://www.sqlite.org/cintro.html Introducción a la interfaz C/C++]
+
*[http://www.sqlite.org/tclsqlite.html La interfaz TCL para SQLite]  
*[http://www.sqlite.org/tclsqlite.html La interfaz TCL para SQLite]
 
*[http://www.sqlite.org/lang.html SQL entendido por SQLite]
 
 
*[http://www.sqlite.org/lang.html SQL entendido por SQLite]
 
*[http://www.sqlite.org/lang.html SQL entendido por SQLite]
  
== Fuente ==
+
== Fuente ==
  
[http://usuarios.pntic.mec.es/sqlite.php Usuarios SQlite]
+
*[http://usuarios.pntic.mec.es/sqlite.php Usuarios SQlite]  
[http://www.sqlite.org/famous.html Well-Known Users of SQLite]
+
*[http://www.sqlite.org/famous.html Well-Known Users of SQLite]  
[http://www.sqlite.org/ommited.html SQL Features That SQLite Does Not Implement]
+
*[http://www.sqlite.org/ommited.html SQL Features That SQLite Does Not Implement]  
[http://www.sqlite.org/features.html SQLite Features]
+
*[http://www.sqlite.org/features.html SQLite Features]  
[http://www.sqlite.org/whentouse.html Appropriate Uses For SQLite]
+
*[http://www.sqlite.org/whentouse.html Appropriate Uses For SQLite]  
[http://www.sqlite.org/datatype3.html Datatypes In SQLite Version 3]
+
*[http://www.sqlite.org/datatype3.html Datatypes In SQLite Version 3]  
[http://www.sqlite.org/quickstart.html SQLite In Five Minutes Or Less]
+
*[http://www.sqlite.org/quickstart.html SQLite In Five Minutes Or Less]
  
[[Category:Solicitada]]
+
[[Categoría: Software libre]]
 +
[[Categoría: Sistemas de gestión de bases de datos]]

última versión al 01:41 5 may 2021

SQLite
Información sobre la plantilla
Sqlite370 banner.gif
Sistema de gestión de bases de de datos
CreadorD. Richard Hipp
Lanzamiento inicial29 de mayo, 2009
Última versión estable3.7.6.1 (14 de abril, 2011)
GéneroBiblioteca de C++
Sistemas Operativos compatiblesMultiplataforma
IdiomaInglés
LicenciaDominio Público
Sitio web
http://www.sqlite.org

SQLite es una biblioteca escrita en lenguaje C que implementa un sistema de gestión de bases de datos transaccionales SQL auto-contenido, sin servidor y sin configuración. El código de SQLite es de dominio público y libre para cualquier uso, ya sea comercial o privado. Actualmente es utilizado en gran cantidad de aplicaciones incluyendo algunas desarrolladas como proyectos de alto nivel.

Historia

Cuando D. Richard Hipp trabajaba desarrollando Software para la fuerza naval de los Estados Unidos, comenzó a desarrollar SQLite, según él por una necesidad personal para su uso personal. En Enero de 2000 D. Richard Hipp estaba trabajando con su equipo de la General Dynamics en la Fuerza naval de los Estados Unidos, en un proyecto de software, el cual se conectaba a una base de datos Informix, el motor funcionaba muy bien, pero habían tenido problemas para hacer una reconfiguración cuando el sistema se reiniciaba. Luego cambiaron a PostgreSQL, pero administrar la base de datos era un poco más complejo. Fue en ese momento cuando surgió la idea de escribir un simple motor de base de datos SQL que permitiera leer los archivos del disco duro, y luego ser llamados en diferentes solicitudes.

Cinco meses más tarde comenzó a escribir las primeras versiones de lo que se conoce hoy como SQLite, con el pensamiento de que sería útil en algún problema similar. A diferencia de los sistemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción.

En su versión 3, SQLite permite bases de datos de hasta 2 Terabytes de tamaño, y también permite la inclusión de campos tipo BLOB. El autor de SQLite ofrece formación, contratos de soporte técnico y características adicionales como compresión y cifrado.

Características

SQLite es un sistema completo de bases de datos que soporta múltiples tablas, índices, triggers y vistas. No necesita un proceso separado funcionando como servidor ya que lee y escribe directamente sobre archivos que se encuentran en el disco duro. El formato de la base de datos es multiplataforma e indistintamente se puede utilizar el mismo archivo en sistemas de 32 y 64 bits.

La base de datos se almacena en un único fichero a diferencia de otros DBMS que hacen uso de varios archivos. SQLite emplea registros de tamaño variable de forma tal que se utiliza el espacio en disco que es realmente necesario en cada momento.

El código fuente está pensado para que sea entendido y accesible por programadores promedio. Todas las funciones y estructuras están bien documentadas.

Existe un programa independiente de nombre sqlite que puede ser utilizado para consultar y gestionar los ficheros de base de datos SQLite. También sirve como ejemplo para la escritura de aplicaciones utilizando la biblioteca SQLite.

Implementación de SQL

La biblioteca implementa la mayor parte del estándar SQL-92, incluyendo transacciones de base de datos atómicas, consistencia de base de datos, aislamiento, y durabilidad (ACID), triggers y la mayor parte de las consultas complejas.

Características omitidas de SQL

  • Restricciones FOREIGN KEY,
  • Soporte completo para triggers (disparadores)
  • Soporte completo para ALTER TABLE, solamente implementa las instrucciones RENAME TABLE y ADD COLUMN.
  • RIGHT y FULL OUTER JOIN, sólo está implementada la instrucción LEFT OUTER JOIN.
  • Escribir en VIEWs, ya que las vistas en SQLite son de sólo lectura.
  • GRANT y REVOKE, pues no tienen sentido en un sistema de bases de datos embebido.

Tipos de datos

SQLite usa un sistema de tipos inusual. En lugar de asignar un tipo a una columna como en la mayor parte de los sistemas de bases de datos SQL, los tipos se asignan a los valores individuales.

Cada uno de los datos almacenados en una base de datos SQLite implemtenta alguno de los siguientes tipos:

  • NULL, un valor nulo.
  • INTEGER, un entero con signo que se almacena en 1, 2, 3, 4, 5, 6 o 8 bytes de acuerdo a la magnitud del valor.
  • REAL, un número de coma flotante (real), almacenado en 8 bytes.
  • TEXT, una cadena de texto almacenada con las codificaciones UTF-8, UTF-16BE o UTF-16-LE.
  • BLOB, datos en formato binario, se almacenan exactamente como se introdujeron.

Autoincremento

Una duda tradicional es el modo de implementar el autoincremento, principalmente para las llaves primarias. La forma más sencilla es declarar el tipo de dato como INTEGER PRIMARY KEY.

Concurrencia

Varios procesos o hilos pueden acceder a la misma base de datos sin problemas. Varios accesos de lectura pueden ser servidos en paralelo. Un acceso de escritura sólo puede ser servido si no se está sirviendo ningún otro acceso concurrentemente.

Ventajas

  • Tamaño: SQLite tiene una pequeña memoria y una única biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.
  • Rendimiento de base de datos: SQLite realiza operaciones de manera eficiente y es más rápido que MySQL y PostgreSQL.
  • Portabilidad: se ejecuta en muchas plataformas y sus bases de datos pueden ser fácilmente portadas sin ninguna configuración o administración.
  • Estabilidad: SQLite es compatible con ACID, reunión de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.
  • SQL: implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub-consultas, generación de usuarios, vistas y triggers.
  • Interfaces: cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Ruby, Tcl, Groovy, Qt ofrece el plugin qsqlite, etc.
  • Costo: SQLite es de dominio público, y por tanto, es libre de utilizar para cualquier propósito sin costo y se puede redistribuir libremente.

Usos aconsejados de SQLite

  • Formato de archivo de aplicaciones.
  • Aplicaciones desktop.
  • Bases de datos para dispositivos.
  • Bases de datos de sitios web de pequeño y mediano tamaño.
  • Enseñanza.

Usos no aconsejados de SQLite

  • Aplicaciones Cliente-servidor.
  • Sitios web con gran cantidad de transacciones.
  • Bases de datos muy grandes (SQLite soporta hasta 2 terabytes).
  • Alta concurrencia.

Aplicaciones que utilizan SQLite

Ejemplos de uso de SQLite

TCL

#!/usr/bin/tclsh
if {$argc!=2} {
    puts stderr "Usage: %s DATABASE SQL-STATEMENT"
    exit 1
}
load /usr/lib/tclsqlite3.so Sqlite3
sqlite3 db [lindex $argv 0]
db eval [lindex $argv 1] x {
    foreach v $x(*) {
        puts "$v = $x($v)"
    }
    puts ""
}
db close

C

#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
	int i;
	for(i=0; i<argc; i++){
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
	}
	printf("\n");
	return 0;
}

int main(int argc, char **argv){
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;

	if( argc!=3 ){
		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
		exit(1);
	}
	rc = sqlite3_open(argv[1], &db);
	if( rc ){
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		exit(1);
	}
	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
	if( rc!=SQLITE_OK ){
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	sqlite3_close(db);
	return 0;
}

Aplicaciones para el trabajo con bases de datos SQLite

Enlaces externos

Fuente