В этой главе вы узнаете, как использовать SQLite в программах на Perl.
Монтаж
SQLite3 может быть интегрирован с Perl с помощью модуля Perl DBI, который является модулем доступа к базе данных для языка программирования Perl. Он определяет набор методов, переменных и соглашений, которые обеспечивают стандартный интерфейс базы данных.
Ниже приведены простые шаги по установке модуля DBI на вашем компьютере с 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
Если вам нужно установить драйвер SQLite для DBI, его можно установить следующим образом:
$ 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 интерфейса DBI
Ниже приведены важные подпрограммы DBI, которые могут удовлетворить ваши требования для работы с базой данных SQLite из вашей программы Perl. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию Perl DBI.
Sr.No. | API и описание |
---|---|
1 |
DBI-> connect ($ data_source, «», «», \% attr) Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно. Источник данных имеет вид : DBI: SQLite: dbname = ‘test.db’, где SQLite — это имя драйвера SQLite, а test.db — имя файла базы данных SQLite. Если имя файла задано как «: memory:» , оно создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только на время сеанса. Если имя файла является фактическим именем файла устройства, то оно пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем. Второй и третий параметры сохраняются как пустые строки, а последний параметр должен передавать различные атрибуты, как показано в следующем примере. |
2 |
$ dbh-> делать ($ SQL) Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI-> connect (). |
3 |
$ dbh-> подготовить ($ SQL) Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора. |
4 |
$ sth-> Execute () Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh-> prepare ($ sql). |
5 |
$ sth-> fetchrow_array () Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке. |
6 |
$ DBI :: эээ Это эквивалентно $ h-> err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера. |
7 |
$ DBI :: ErrStr Это эквивалентно $ h-> errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI. |
8 |
$ dbh-> разъединение () Эта подпрограмма закрывает соединение с базой данных, ранее открытое вызовом DBI-> connect (). |
DBI-> connect ($ data_source, «», «», \% attr)
Устанавливает соединение базы данных или сеанс с запрошенным $ data_source. Возвращает объект дескриптора базы данных, если соединение установлено успешно.
Источник данных имеет вид : DBI: SQLite: dbname = ‘test.db’, где SQLite — это имя драйвера SQLite, а test.db — имя файла базы данных SQLite. Если имя файла задано как «: memory:» , оно создаст базу данных в оперативной памяти в ОЗУ, которая будет действовать только на время сеанса.
Если имя файла является фактическим именем файла устройства, то оно пытается открыть файл базы данных, используя его значение. Если файл с таким именем не существует, то создается новый файл базы данных с таким именем.
Второй и третий параметры сохраняются как пустые строки, а последний параметр должен передавать различные атрибуты, как показано в следующем примере.
$ dbh-> делать ($ SQL)
Эта подпрограмма подготавливает и выполняет один оператор SQL. Возвращает количество затронутых строк или undef при ошибке. Возвращаемое значение -1 означает, что количество строк неизвестно, неприменимо или недоступно. Здесь $ dbh — дескриптор, возвращаемый вызовом DBI-> connect ().
$ dbh-> подготовить ($ SQL)
Эта подпрограмма подготавливает оператор для последующего выполнения ядром базы данных и возвращает ссылку на объект дескриптора оператора.
$ sth-> Execute ()
Эта процедура выполняет любую обработку, необходимую для выполнения подготовленного оператора. Undef возвращается, если произошла ошибка. Успешное выполнение всегда возвращает true независимо от количества затронутых строк. Здесь $ sth — дескриптор оператора, возвращаемый вызовом $ dbh-> prepare ($ sql).
$ sth-> fetchrow_array ()
Эта процедура извлекает следующую строку данных и возвращает ее в виде списка, содержащего значения полей. Пустые поля возвращаются как неопределенные значения в списке.
$ DBI :: эээ
Это эквивалентно $ h-> err, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственный код ошибки ядра базы данных из последнего вызванного метода драйвера.
$ DBI :: ErrStr
Это эквивалентно $ h-> errstr, где $ h — любой из типов дескрипторов, таких как $ dbh, $ sth или $ drh. Это возвращает собственное сообщение об ошибке ядра СУБД из последнего вызванного метода DBI.
$ dbh-> разъединение ()
Эта подпрограмма закрывает соединение с базой данных, ранее открытое вызовом DBI-> connect ().
Подключиться к базе данных
Следующий код Perl показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
#!/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";
Теперь давайте запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Сохраните приведенный выше код в файле sqlite.pl и выполните его, как показано ниже. Если база данных успешно создана, на ней появится следующее сообщение —
$ chmod +x sqlite.pl $ ./sqlite.pl Open database successfully
Создать таблицу
Следующая Perl-программа используется для создания таблицы в ранее созданной базе данных.
#!/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();
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY в вашем test.db и отобразит следующие сообщения:
Opened database successfully Table created successfully
ПРИМЕЧАНИЕ. — Если вы видите следующую ошибку в любой из операций —
DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398
В таком случае откройте файл dbdimp.c, доступный в установке DBD-SQLite, и найдите функцию sqlite3_prepare () и измените ее третий аргумент на -1 вместо 0. Наконец, установите DBD :: SQLite с помощью make и выполните make install для разрешения проблема.
ВСТАВИТЬ Операция
Следующая программа Perl показывает, как создавать записи в таблице 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(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();
Когда вышеуказанная программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
В следующей программе Perl показано, как извлекать и отображать записи из таблицы 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(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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
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
ОБНОВЛЕНИЕ Операция
Следующий код Perl показывает, как выполнить оператор UPDATE, чтобы обновить любую запись, а затем извлечь и отобразить обновленные записи из таблицы 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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
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
УДАЛЕНИЕ Операция
Следующий код Perl показывает, как использовать инструкцию DELETE для удаления любой записи, а затем извлечь и отобразить оставшиеся записи из таблицы 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();
Когда вышеуказанная программа будет выполнена, она даст следующий результат.