Latest web development tutorials

SQLite는 - 펄

설치

sqlite3를 펄 DBI 펄 모듈 통합을 사용할 수 있습니다. 펄 DBI 모듈은 데이터베이스 액세스 모듈 펄 프로그래밍 언어이다. 이 방법 변수 집합을 정의하고 규정 표준 데이터베이스에 인터페이스를 제공한다.

다음은 리눅스 / 유닉스 시스템에서 DBI 모듈을 설치하는 간단한 단계를 보여줍니다 :

$를 Wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
$ 타르 xvfz DBI-1.625.tar.gz
$ 카드뮴 DBI-1.625
$ 펄 Makefile.PL
$ 확인
$ 설치 확인

당신이 SQLite는 DBI 드라이버를 설치해야하는 경우 다음 단계를 수행하여 설치할 수 있습니다 :

$를 Wget http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.11.tar.gz
$ 타르는 DBD-SQLite는-1.11.tar.gz를 xvfz
$ 카드뮴 DBD-SQLite는 - 1.11
$ 펄 Makefile.PL
$ 확인
$ 설치 확인

DBI 인터페이스 API

다음은 펄 프로그램에서 SQLite는 데이터베이스를 사용하여 사용자의 요구를 충족하기 위해 중요한 DBI 프로그램입니다. 더 자세한 내용이 필요하면 공식 펄 DBI 문서를 참조하십시오.

序号API & 描述
1DBI->connect($data_source, "", "", \%attr)

建立一个到被请求的 $data_source 的数据库连接或者 session。如果连接成功,则返回一个数据库处理对象。

数据源形式如下所示:DBI:SQLite:dbname='test.db'。其中,SQLite 是 SQLite 驱动程序名称,test.db 是 SQLite 数据库文件的名称。如果文件名filename赋值为':memory:',那么它将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 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。该程序返回最后调用的驱动程序(driver)方法的数据库引擎错误代码。

7$DBI::errstr

这相当于 $h->errstr。其中,$h 是任何的处理类型,比如 $dbh、$sth 或 $drh。该程序返回最后调用的 DBI 方法的数据库引擎错误消息。

8$dbh->disconnect()

该例程关闭之前调用 DBI->connect() 打开的数据库连接。

데이터베이스에 연결

다음 펄 코드는 기존 데이터베이스에 연결하는 방법을 보여줍니다. 데이터베이스가 존재하지 않는 경우, 생성하고, 마지막으로 데이터베이스 객체를 반환한다.

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는"; 
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1}) 
                      또는 $ DBI 다이 :: errstr을을;

인쇄 "열린 데이터베이스가 성공적으로 N을 \";

자, 위의 프로그램을 실행 현재 디렉토리에 저희데이터베이스의 test.db를 만들 수 있습니다.필요에 따라 경로를 변경할 수 있습니다. 다음과 같이 수행 표시 파일을 누릅니다 sqlite.pl 위의 코드를 저장합니다. 데이터베이스가 성공적으로 생성하면 아래와 같은 메시지를 표시합니다 :

$ chmod를 + X sqlite.pl
$ ./sqlite.pl
오픈 데이터베이스를 성공적으로

테이블 만들기

다음 펄 코드는 이전에 만든 데이터베이스에서 테이블을 만드는 데 사용됩니다

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는";
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1})
                      또는 $ DBI 다이 :: errstr을을;
인쇄 "열린 데이터베이스가 성공적으로 N을 \";

내 $ stmt에 = 전분기 (CREATE TABLE 회사
      (ID INT PRIMARY KEY NOT NULL,
       NULL NOT 이름 텍스트,
       NULL NOT AGE INT,
       주소의 CHAR (50)
       SALARY에 REAL));
내 $의 RV = $ dbh-> 할 ($ stmt에);
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
} 그밖에 {
   인쇄 "성공적으로 N을 \ 작성한 표";
}
$ Dbh-> 분리 ();

위의 절차,그것의 test.db에 회사 테이블을 생성하고 표시 할 때 메시지는 다음과 같습니다 :

열린 데이터베이스를 성공적으로
표 성공적으로 생성

참고 : 모든 작업에 다음과 같은 오류가 발생하는 경우 : 경우에 당신은에 오류가 다음을 참조 동작 중 하나를

DBD :: SQLite는 :: 세인트 실패 실행 : 없습니다 오류 (21) dbdimp.c 라인 398에

이 경우, 사용 가능한 dbdimp.c 파일에 설치된 DBD-SQLite는 연,sqlite3_prepare () 함수를 발견하고는 -1 세 번째 매개 변수 0입니다.마지막으로,메이크업의 사용 및 DBD :: SQLite는 설치 설치 확인하여문제를 해결할 수 있습니다. 이 경우 당신은 개방 dbdimp.c의 것 DBD-SQLite는 설치에 사용 가능한 파일 및 sqlite3_prepare () 함수를 찾을 수 있도록 사용하는 대신 -1 0의 마지막 DBD를 설치 :: SQLite는 세 번째 인수를 변경하고 해결하기 위해 설치해야합니까 문제.

INSERT 작업

다음 펄 프로그램은 위에서 만든 회사 테이블에 레코드를 만드는 방법을 보여줍니다 :

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는";
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1})
                      또는 $ DBI 다이 :: errstr을을;
인쇄 "열린 데이터베이스가 성공적으로 N을 \";

회사 INTO 내 $ stmt에 = 전분기 (INSERT (ID, 이름, 나이, 주소, SALARY)
      VALUES (1, '폴', 32 '캘리포니아', 20000.00));
내 $의 RV = $ dbh-은> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;

$ 됨 Stmt = 전분기 (회사 INTO INSERT (ID, 이름, 나이, 주소, SALARY)
      VALUES (2, '알렌', 25 일 '텍사스', 15000.00));
$ 계시록 = $ dbh-> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;

$ 됨 Stmt = 전분기 (회사 INTO INSERT (ID, 이름, 나이, 주소, SALARY)
      VALUES (3 '테디', 23 ', 노르웨이, 20000.00));
$ 계시록 = $ dbh-> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;

$ 됨 Stmt = 전분기 (회사 INTO INSERT (ID, 이름, 나이, 주소, SALARY)
      VALUES (4, '마크', 25 일 '리치 사교계', 65000.00));
$ 계시록 = $ dbh-> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;

인쇄 "N \ 성공적으로 만들어 기록";
$ Dbh-> 분리 ();

위의 프로그램은 주어진 레코드에 대한 회사 테이블에 생성됩니다, 실행, 다음과 같은 두 줄을 표시한다 :

열린 데이터베이스를 성공적으로
기록이 성공적으로 생성

SELECT 작업

다음 펄 프로그램은 이전에 만든 회사 테이블에서 가져 오는 방법을 보여줍니다 및 레코드를 표시합니다 :

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는";
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1})
                      또는 $ DBI 다이 :: errstr을을;
인쇄 "열린 데이터베이스가 성공적으로 N을 \";

내 $ stmt에 = 전분기 (ID, 이름, 주소, 회사에서 급여를 SELECT);
내 $ STH = $ dbh-> ($ stmt에)를 준비;
내 $의 RV = $ sth-> (실행) 또는 $ DBI :: errstr을 다이;
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
}
동안 (내 @row = $ sth-> fetchrow_array ()) {
      인쇄 "ID ="$ 행 [0] "\ n을"..;
      . 인쇄 "NAME ="$ 행 [1] "\ n을을";
      . 인쇄 "ADDRESS ="$ 행 [2] "\ n을을";
      . 인쇄 "SALARY ="$ 행 [3] "\ n을 \ 없음"을;
}
인쇄 "성공적으로 N을 \ 수행 할 작업";
$ Dbh-> 분리 ();

상기 프로그램이 실행될 때, 다음과 같은 결과를 얻을 :

열린 데이터베이스를 성공적으로
ID = 1
NAME = 폴
ADDRESS = 캘리포니아
SALARY = 20000

ID = 2
NAME = 앨런
ADDRESS = 텍사스
SALARY = 15000

ID = 3
NAME = 테디
ADDRESS = 노르웨이
SALARY = 20000

ID = 4
NAME = 마크
ADDRESS = 리치 사교계
SALARY = 65000

작업이 성공적으로 완료

UPDATE 작업

다음 펄 코드는, 모든 레코드를 업데이트 COMPANY 테이블에서 얻을 업데이트 된 레코드를 표시하려면 UPDATE 문을 사용하는 방법을 보여줍니다

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는";
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1})
                      또는 $ DBI 다이 :: errstr을을;
인쇄 "열린 데이터베이스가 성공적으로 N을 \";

내 $ stmt에 = 전분기 (UPDATE 회사는 SALARY = 25000.00을 설정할 경우 ID = 1);
내 $의 RV = $ dbh-은> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
} 그밖에 {
   인쇄는 "행의 총 수 업데이트 : $ RV를 \ n"을;
}
$ 됨 Stmt = 전분기 (SELECT ID, 이름, 주소, 회사에서 급여);
내 $ STH = $ dbh-> ($ stmt에)를 준비;
$ 계시록 = $ sth-> (실행) 또는 $ DBI :: errstr을 다이;
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
}
동안 (내 @row = $ sth-> fetchrow_array ()) {
      인쇄 "ID ="$ 행 [0] "\ n을"..;
      . 인쇄 "NAME ="$ 행 [1] "\ n을을";
      . 인쇄 "ADDRESS ="$ 행 [2] "\ n을을";
      . 인쇄 "SALARY ="$ 행 [3] "\ n을 \ 없음"을;
}
인쇄 "성공적으로 N을 \ 수행 할 작업";
$ Dbh-> 분리 ();

상기 프로그램이 실행될 때, 다음과 같은 결과를 얻을 :

열린 데이터베이스를 성공적으로
행의 총 수는 업데이트 : 1
ID = 1
NAME = 폴
ADDRESS = 캘리포니아
SALARY = 25000

ID = 2
NAME = 앨런
ADDRESS = 텍사스
SALARY = 15000

ID = 3
NAME = 테디
ADDRESS = 노르웨이
SALARY = 20000

ID = 4
NAME = 마크
ADDRESS = 리치 사교계
SALARY = 65000

작업이 성공적으로 완료

DELETE 작업

다음 펄 코드는 DELETE 문은 모든 레코드를 삭제 한 다음 회사 테이블에서 촬영하고 나머지 기록을 표시 사용하는 방법을 보여줍니다 :

#!를 / usr / 빈 / 펄

DBI를 사용;
엄격한 사용;

내 $ 드라이버 = "SQLite는";
내 $ 데이터베이스 = "의 test.db";
내 $의 DSN = "DBI : $ 드라이버 : DBNAME = $ 데이터베이스";
내 $ 사용자 ID = "";
내 $ 암호 = "";
내 $ DBH = DBI-> 연결 ($의 DSN, $ 사용자 ID, $ 암호를, {RaiseError => 1})
                      또는 $ DBI 다이 :: errstr을을;
인쇄 "열린 데이터베이스가 성공적으로 N을 \";

내 $ stmt에 = 전분기 (회사에서 삭제 어디 ID = 2);
내 $의 RV = $ dbh-은> ($ stmt에)을 수행 또는 $ DBI :: errstr을 다이;
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
} 그밖에 {
   인쇄는 "행의 총 수 삭제 : $ RV를 \ n"을;
}
$ 됨 Stmt = 전분기 (SELECT ID, 이름, 주소, 회사에서 급여);
내 $ STH = $ dbh-> ($ stmt에)를 준비;
$ 계시록 = $ sth-> (실행) 또는 $ DBI :: errstr을 다이;
경우 ($의 RV <0) {
   인쇄 $ DBI :: errstr에;
}
동안 (내 @row = $ sth-> fetchrow_array ()) {
      인쇄 "ID ="$ 행 [0] "\ n을"..;
      . 인쇄 "NAME ="$ 행 [1] "\ n을을";
      . 인쇄 "ADDRESS ="$ 행 [2] "\ n을을";
      . 인쇄 "SALARY ="$ 행 [3] "\ n을 \ 없음"을;
}
인쇄 "성공적으로 N을 \ 수행 할 작업";
$ Dbh-> 분리 ();

상기 프로그램이 실행될 때, 다음과 같은 결과를 얻을 :

열린 데이터베이스를 성공적으로
행의 총 수는 삭제 : 1
ID = 1
NAME = 폴
ADDRESS = 캘리포니아
SALARY = 25000

ID = 3
NAME = 테디
ADDRESS = 노르웨이
SALARY = 20000

ID = 4
NAME = 마크
ADDRESS = 리치 사교계
SALARY = 65000

작업이 성공적으로 완료