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 & 描述 |
---|---|
1 | DBI->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 작업이 성공적으로 완료