SQLite - Perl
Instalación
SQLite3 puede integrarse con Perl utilizando el módulo Perl DBI. El módulo Perl DBI es un módulo de acceso a bases de datos para el lenguaje de programación Perl. Define un conjunto de métodos, variables y reglas que proporcionan una interfaz de base de datos estándar.
A continuación se muestran los sencillos pasos para instalar el módulo DBI en máquinas Linux/UNIX:
$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz $ tar xvfz DBI-1.625.tar.gz $ cd DBI-1.625 $ perl Makefile.PL $ make $ make install
Si necesita instalar el controlador SQLite para DBI, puede seguir los siguientes pasos para instalarlo:
$ wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz $ tar xvfz DBD-SQLite-1.11.tar.gz $ cd DBD-SQLite-1.11 $ perl Makefile.PL $ make $ make install
API de la interfaz DBI
Los siguientes son los programas importantes de DBI que pueden satisfacer sus necesidades de uso de la base de datos SQLite en programas Perl. Si necesita más detalles, consulte la documentación oficial de Perl DBI.
| N.º | API y descripción |
|---|---|
| 1 | DBI->connect($data_source, "", "", \%attr) Establece una conexión de base de datos o sesión al $data_source solicitado. Si la conexión es exitosa, devuelve un objeto manejador de base de datos. La forma del origen de datos es la siguiente:DBI:SQLite:dbname='test.db'. Donde SQLite es el nombre del controlador SQLite, y test.db es el nombre del archivo de base de datos SQLite. Si el nombre de archivofilenamese asigna a':memory:', entonces se creará una base de datos en memoria en la RAM, que solo persistirá durante la vigencia de la sesión. Si el nombre de archivo filename es un nombre de archivo de dispositivo real, entonces intentará abrir el archivo de base de datos usando este valor de parámetro. Si el archivo con ese nombre no existe, se creará un nuevo archivo de base de datos con ese nombre. Puede dejar el segundo y tercer parámetros como cadenas vacías; el último parámetro se utiliza para pasar varios atributos. Consulte los siguientes ejemplos para más detalles. |
| 2 | $dbh->do($sql) Esta rutina prepara y ejecuta una sentencia SQL simple. Devuelve el número de filas afectadas, o undef si ocurre un error. El valor de retorno -1 significa que el número de filas es desconocido, no aplicable o no disponible. Aquí, $dbh es el manejador devuelto por la llamada DBI->connect(). |
| 3 | $dbh->prepare($sql) Esta rutina prepara una sentencia para su posterior ejecución por el motor de base de datos y devuelve un objeto manejador de sentencia. |
| 4 | $sth->execute() Esta rutina ejecuta cualquier procesamiento necesario para ejecutar una sentencia previamente preparada. Devuelve undef si ocurre un error. Si se ejecuta con éxito, siempre devuelve true sin importar cuántas filas se vean afectadas. Aquí, $sth es el manejador de sentencia devuelto por la llamada $dbh->prepare($sql). |
| 5 | $sth->fetchrow_array() Esta rutina obtiene la siguiente fila de datos y la devuelve como una lista de valores de campos. En esta lista, los campos Null se devuelven como valores undef. |
| 6 | $DBI::err Esto equivale a $h->err. Aquí, $h es cualquier tipo de manejador, como $dbh, $sth o $drh. Este programa devuelve el código de error del motor de base de datos del último método de controlador (driver) llamado. |
| 7 | $DBI::errstr Esto equivale a $h->errstr. Aquí, $h es cualquier tipo de manejador, como $dbh, $sth o $drh. Este programa devuelve el mensaje de error del motor de base de datos del último método DBI llamado. |
| 8 | $dbh->disconnect() Esta rutina cierra la conexión a la base de datos abierta previamente mediante la llamada a DBI->connect(). |
Conectar a la base de datos
El siguiente código Perl muestra cómo conectarse a una base de datos existente. Si la base de datos no existe, será creada y, al final, se devolverá un objeto de base de datos.
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
Ahora, ejecutemos el programa anterior para crear nuestra base de datos en el directorio actual.test.db. Puede cambiar la ruta según sea necesario. Guarde el código anterior en un archivo sqlite.pl y ejecútelo como se muestra a continuación. Si la base de datos se crea correctamente, se mostrará el siguiente mensaje:
$ chmod +x sqlite.pl $ ./sqlite.pl Open database successfully
Crear tabla
El siguiente fragmento de código Perl se utilizará para crear una tabla en la base de datos creada anteriormente:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL););
my $rv = $dbh->do($stmt);
if($rv < 0){
print $DBI::errstr;
} else {
print "Table created successfully\n";
}
$dbh->disconnect();
Cuando se ejecute el programa anterior, setest.dbcreará la tabla COMPANY en el lugar correspondiente y mostrará el siguiente mensaje:
Opened database successfully Table created successfully
Nota:Si en cualquiera de las operaciones ve el siguiente error: en caso de que vea el siguiente error en cualquiera de las operaciones:
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398
En este caso, usted ya ha abierto el archivo dbdimp.c disponible en la instalación de DBD-SQLite; busque sqlite3_prepare()la función y cambie su tercer parámetro de 0 a -1. Finalmente, usemakeymake installinstalar DBD::SQLite y el problema se resolverá. sqlite3_prepare() function and change its third argument to -1 instead of 0. Finally install DBD::SQLite using make and do make install to resolve the problem.
Operación INSERT
El siguiente programa Perl muestra cómo crear registros en la tabla COMPANY creada anteriormente:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;
print "Records created successfully\n";
$dbh->disconnect();
Cuando se ejecute el programa anterior, creará los registros dados en la tabla COMPANY y mostrará las dos líneas siguientes:
Opened database successfully Records created successfully
Operación SELECT
El siguiente programa Perl muestra cómo obtener y mostrar registros de la tabla COMPANY creada anteriormente:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecute el programa anterior, producirá el siguiente resultado:
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
Operación UPDATE
El siguiente código Perl muestra cómo usar la sentencia UPDATE para actualizar cualquier registro y luego obtener y mostrar los registros actualizados de la tabla COMPANY:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
print $DBI::errstr;
}else{
print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecute el programa anterior, producirá el siguiente resultado:
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
Operación DELETE
El siguiente código Perl muestra cómo usar la sentencia DELETE para eliminar cualquier registro y luego obtener y mostrar los registros restantes de la tabla COMPANY:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ){
print $DBI::errstr;
}else{
print "Total number of rows deleted : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0){
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecute el programa anterior, producirá el siguiente resultado:
Opened database successfully Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfullyOtras extensiones