English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite Perl

설치

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

이 중요한 DBI 프로그램은 Perl 프로그램에서 SQLite 데이터베이스를 사용하는 요구를 충족시킬 수 있습니다. 자세한 내용을 알고 싶다면 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
데이터베이스 열기 성공

테이블 생성

아래 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;
}
   print "Table created successfully\n";
}
$dbh->disconnect();

위 프로그램이 실행될 때, 다음 위치에 생성됩니다 test.db COMPANY 테이블을 생성하고, 다음과 같은 메시지를 표시합니다:

데이터베이스 열림 성공
테이블이 성공적으로 생성되었습니다

주의:아래와 같은 오류를 어떤 작업 중에도 만났다면: 아래와 같은 오류를 어떤 작업 중에도 보고 받았다면:

DBD::SQLite::st execute 실패: 오류가 아닙니다(21)에서 dbdimp.c 라인 398

이 경우, 이미 DBD에 있는-SQLite 설치 중에 dbdimp.c 파일을 열고, 찾습니다 sqlite3_prepare() 함수를 사용하고, 그 세 번째 파라미터 0을 -1마지막으로 만드는 대신.install DBD::SQLite를 설치하면 문제를 해결할 수 있습니다 이 경우 DBD에 있는 dbdimp.c 파일을 열 수 있습니다-SQLite 설치 및 찾기 sqlite3_prepare() 기능과 그 제3번 인자를 -1 DBD::SQLite를 사용하여 최종 설치 만드는 대신. 하고 install 문제를 해결하기 위해.

INSERT 작업

아래의 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;
my $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;
my $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;
my $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 "기록이 성공적으로 생성되었습니다\n";
$dbh->disconnect();

위 프로그램이 실행될 때, COMPANY 테이블에 주어진 기록이 생성되고 다음 두 행이 표시됩니다:

데이터베이스 열림 성공
기록이 성공적으로 생성되었습니다

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

위 프로그램이 실행될 때, 다음과 같은 결과를 생성합니다:

데이터베이스 열림 성공
ID = 1
NAME = Paul
ADDRESS = 캘리포니아
SALARY =  20000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000
ID = 3
NAME = Teddy
ADDRESS = 노르웨이
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-월요일
SALARY =  65000
작업이 성공적으로 완료되었습니다

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 "총 갱신된 행 수 : $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();

위 프로그램이 실행될 때, 다음과 같은 결과를 생성합니다:

데이터베이스 열림 성공
총 갱신된 행 수: 1
ID = 1
NAME = Paul
ADDRESS = 캘리포니아
SALARY =  25000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000
ID = 3
NAME = Teddy
ADDRESS = 노르웨이
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-월요일
SALARY =  65000
작업이 성공적으로 완료되었습니다

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

위 프로그램이 실행될 때, 다음과 같은 결과를 생성합니다:

데이터베이스 열림 성공
삭제된 행의 총 수: 1
ID = 1
NAME = Paul
ADDRESS = 캘리포니아
SALARY =  25000
ID = 3
NAME = Teddy
ADDRESS = 노르웨이
SALARY =  20000
ID = 4
NAME = Mark
ADDRESS = Rich-월요일
SALARY =  65000
작업이 성공적으로 완료되었습니다