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 및 설명 |
---|---|
1 | DBI- > ;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로 변경합니다. 마지막으로 make 및 make 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 successfullySELECT 작업 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 successfullyUPDATE 작업 아래 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 successfullyDELETE 작업다음 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