SQLite 클래식 튜토리얼login
SQLite 클래식 튜토리얼
작가:php.cn  업데이트 시간:2022-04-13 17:05:02

SQLite-펄


설치

SQLite3은 Perl DBI 모듈을 사용하여 Perl과 통합할 수 있습니다. Perl DBI 모듈은 Perl 프로그래밍 언어용 데이터베이스 액세스 모듈입니다. 이는 표준 데이터베이스 인터페이스를 제공하는 일련의 메소드, 변수 및 규칙을 정의합니다.

Linux/UNIX 시스템에 DBI 모듈을 설치하는 간단한 단계는 다음과 같습니다.

$ 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

DBI용 SQLite 드라이버를 설치해야 하는 경우 다음 단계에 따라 설치할 수 있습니다.

$ 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

DBI 인터페이스 API

다음은 Perl 프로그램에서 SQLite 데이터베이스를 사용하기 위한 요구 사항을 충족할 수 있는 중요한 DBI 프로그램입니다. 더 자세한 내용이 필요하면 공식 Perl DBI 문서를 확인하세요.

일련번호API 및 설명
1DBI- > ;connect($data_source, "", "", %attr)

요청된 $data_source에 대한 데이터베이스 연결 또는 세션을 설정합니다. 연결에 성공하면 데이터베이스 처리 객체가 반환됩니다.

데이터 소스 형식은 DBI:SQLite:dbname='test.db'입니다. 여기서 SQLite는 SQLite 드라이버의 이름이고 test.db는 SQLite 데이터베이스 파일의 이름입니다. 파일 이름 filename':memory:' 값이 할당되면 세션 기간 동안만 지속되는 RAM 내 메모리 데이터베이스가 생성됩니다.

filename이 실제 장치 파일 이름인 경우 이 매개변수 값을 사용하여 데이터베이스 파일을 열려고 시도합니다. 해당 이름의 파일이 없으면 해당 이름의 새 데이터베이스 파일이 생성됩니다.

두 번째와 세 번째 매개변수는 공백으로 남겨둘 수 있으며, 마지막 매개변수는 다양한 속성을 전달하는 데 사용됩니다. 자세한 내용은 아래 예시를 참조하세요.

2$dbh->do($sql)

이 루틴은 준비되어 실행됩니다. 간단한 SQL 문입니다. 영향을 받은 행 수를 반환하고, 오류가 발생한 경우 undef를 반환합니다. 반환 값 -1은 행 수를 알 수 없거나, 적용할 수 없거나, 사용할 수 없음을 의미합니다. 여기서 $dbh는 DBI->connect() 호출에 의해 반환된 핸들입니다.

3$dbh->prepare($sql)

이 루틴은 데이터베이스 엔진입니다. 후속 실행에서는 명령문을 준비하고 명령문 처리 객체를 반환합니다.

4$sth->execute()

이 루틴은 모든 실행 준비를 수행합니다. 처리가 필요합니다. 오류가 발생하면 undef를 반환합니다. 성공적으로 실행되면 영향을 받은 행 수에 관계없이 항상 true를 반환합니다. 여기서 $sth는 $dbh->prepare($sql) 호출에서 반환된 명령문에 의해 처리됩니다.

5$sth->fetchrow_array()

이 루틴은 다음 데이터 행을 가져옵니다. , 그리고 각 필드의 값을 포함하는 목록으로 반환됩니다. 이 목록에서 Null 필드는 undef 값으로 반환됩니다.

6$DBI::err

$h->err과 동일합니다. 여기서 $h는 $dbh, $sth 또는 $drh와 같은 처리 유형입니다. 이 프로그램은 호출된 마지막 드라이버 메서드에 대한 데이터베이스 엔진 오류 코드를 반환합니다.

7$DBI::errstr

$h->errstr과 동일합니다. 여기서 $h는 $dbh, $sth 또는 $drh와 같은 처리 유형입니다. 이 프로그램은 마지막으로 호출된 DBI 메소드에 대한 데이터베이스 엔진 오류 메시지를 반환합니다.

8$dbh->disconnect()

이 루틴은 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();

위 프로그램이 실행되면 test.db에 COMPANY 테이블이 생성되고 아래와 같은 메시지가 표시됩니다.

Opened database successfully
Table created successfully

참고: 작업 중 다음 오류가 표시되는 경우:

DBD::SQLite::st execute failed: not an error(21) at dbdimp.c line 398

이 경우 DBD-SQLite 설치에서 사용 가능한 dbdimp를 켠 경우 sqlite3_prepare를 찾으세요. () 함수를 사용하고 세 번째 매개변수를 0에서 -1로 변경합니다. 마지막으로 makemake install을 사용하여 DBD::SQLite를 설치하여 문제를 해결하세요. 이 경우 DBD-SQLite 설치에서 사용할 수 있는 dbdimp.c 파일을 열고 sqlite3_prepare() 함수를 찾아 세 번째 인수를 0 대신 -1로 변경합니다. 마지막으로 <를 사용하여 DBD::SQLite를 설치합니다. 🎜>make하고 make install을 수행하여 문제를 해결하세요.

INSERT 작업

다음 Perl 프로그램은 Record 위에서 생성된 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

SELECT 작업

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

UPDATE 작업

아래 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

DELETE 작업

다음 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();

위 프로그램이 다음과 같은 경우 실행되면 다음과 같은 결과가 생성됩니다:

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 successfully