Grafoscopio

Artifact [8178056561]
Login

Artifact 817805656163191e12228e7b80930aba659a6136:

Wiki page [SQLite] by offray 2016-03-21 18:09:55.
D 2016-03-21T18:09:55.489
L SQLite
N text/x-markdown
P 84bd727923b6f1fa96551135dadd1de82b9f5f48
U offray
W 2631
# SQLite

[SQLite](http://sqlite.org/) es un motor de bases de datos liviano y autocontenido que está desplegado en una gran cantidad de dispositivos y lugares (es quizás el motor de bases de datos de mayor despliegue en el mundo). Se puede usar para varias operaciones con datos, con una configuración mínima y muy buen desempeño.

**Referencias extra**

  - [Appropriate Uses For SQLite](http://sqlite.org/whentouse.html): Para ver más sobre los escenarios en los cuales SQLite puede ser usado.
  - [DB Browser for SQLite](http://sqlitebrowser.org/): Una herramienta visual de código abierto para crear diseñar, editar, importar, exportar y transformar archivos compatibles con SQLite.
  - [NBSQLite3](http://www.samadhiweb.com/NBSQLite3.html): Una interface entre Pharo y SQLite basada en NativeBoost por tanto compatible con las versiones de Pharo 4 y Moose 5.x. Habrá otras soporte para Pharo 5 y Moose 6, basándose en otras librerías y con soporte nativo para 64 bits. 

## Instalación:

Debido a que sólo hasta abril de 2016 (aprox.) Pharo soportará nativamente 64 bits, para integrar SQLite a Grafoscopio, se debe instalar la versión de 32 bits de SQLite, ejecutando desde el [playground](wiki?name=playground): 

    ExternalApp installSQLite32Bits

Luego ejecutamos, la instalación `NBSQlite` que crea la interface entre Pharo y SQLite:


    Gofer new
    url: 'http://ss3.gemtalksystems.com/ss/NBSQLite3';
    package: 'NBSQLite3';
    load.

## Inicio rápido

Para probar que la interface entre los dos sistemas funciona correctamente ejecutamos este código (ejecutable tambíen en el `spotter` desde <http://ws.stfx.eu/POQCW0NVKZJN>):

	| db resultSet row |

	db := NBSQLite3Connection openOn: ':memory:'.
	[ db basicExecute: 'create table x (xk integer primary key, iv integer, tv text)'.
	  db beginTransaction.
	  db execute: 'insert into x values (NULL, ?, ?)'
		with: #(1 'two').
	  db execute: 'insert into x values (NULL, ?, ?)'
		with: #(2 'three').
	  db commitTransaction.

	  resultSet := db execute: 'select * from x'.
	  [ (row := resultSet next) isNotNil ] whileTrue: [
		| xk iv tv |
		xk := row at: 'xk'. 
		iv := row at: 'iv'.
		tv := row at: 'tv'.
		Transcript show: 'xk = ', xk asString, ' (', xk class asString, ')'; cr.
		Transcript show: 'iv = ', iv asString, ' (', iv class asString, ')'; cr.
		Transcript show: 'tv = ', tv asString, ' (', tv class asString, ')'; cr ].
	  resultSet close.
	] ensure: [ db close ]. 


Que debería verse así:

![NBSQLite quick start](./doc/tip/Docs/Imagenes/nbsqlite-integration-test.png)
Z 8fa6d795f265c96e2579adfdaa87efbf