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 $タールxvfz DBI-1.625.tar.gz $カドミウムDBI-1.625 $ Perlの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 $ PerlのMakefile.PL $ください $インストールしてください
DBIインタフェースAPI
次のPerlプログラムでSQLiteのデータベースを使用して、あなたのニーズを満たすために重要なDBIプログラムです。 あなたはより多くの詳細が必要な場合は、公式のPerlの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() 打开的数据库连接。 |
データベースへの接続
次のPerlコードでは、既存のデータベースに接続する方法を示しています。 データベースが存在しない場合、それが作成され、最終的に、データベース・オブジェクトを返します。
#!/ usr / bin / perlの部分 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 データベースをオープンに成功
テーブルを作成します。
次のPerlコードスニペットは、以前に作成したデータベース内のテーブルを作成するために使用されます。
#!/ usr / bin / perlの部分 DBIを使用します。 厳しい使用します。 私の$ドライバ= "SQLiteの"; 私の$データベース= "test.dbという"; 私の$ DSN = "DBI:$ドライバ:DBNAME = $データベース"。 私の$ユーザーID = ""; 私の$パスワード= ""; 私の$ DBH = DBI->($のDSN、$ユーザーID、$パスワード、{RAISEERROR => 1})を接続 または$ DBI :: errstrは死にます。 印刷「オープンデータベースが正常に\ n "; 私の$ stmtは= QQ(CREATE TABLE会社 (ID INT PRIMARY KEY NOT NULL、 名前テキスト、NOT NULL、 AGEのINT NOT NULLと、 ADDRESSのCHAR(50)、 SALARY REAL);); 私の$ RV = $は$ dbh->行う($ののstmt); ($のRV <0){場合 印刷$ DBI :: errstrは、 }エルス{ 印刷」に成功した\ n作成した表」。 } $は$ dbh->切断();
ときに上記の手順、それはtest.dbというにおけるCOMPANYテーブルを作成し、以下に示すメッセージが表示されます。
データベース正常にオープン 表作成に成功
メモ:任意の操作で次のエラーが発生する場合があります場合には、次のエラーが表示操作のいずれか:
DBD :: SQLiteの:: stが失敗した実行:dbdimp.cライン398でないエラー(21)
この場合は、あなたが利用可能なdbdimp.cファイルにインストールDBD-SQLiteのを開いている、sqlite3_prepare()関数を見つけ、それが-1の3番目のパラメータ0です。 最後に、メイクの使用はとDBD :: SQLiteのをインストールするには、make installを、あなたが問題を解決することができます。 このケースでは、オープンdbdimp.cの必要がありますDBD-SQLiteのインストールで使用可能なファイルをし、sqlite3_prepare()関数を見つけると、最後に作る使用してDBD :: SQLiteのをインストールして解決するためにmake installを実行するには-1ではなく0の3番目の引数を変更します問題。
INSERT操作
次のPerlプログラムは、上記で作成した会社テーブル内のレコードを作成する方法を示しています。
#!/ usr / bin / perlの部分 DBIを使用します。 厳しい使用します。 私の$ドライバ= "SQLiteの"; 私の$データベース= "test.dbという"; 私の$ DSN = "DBI:$ドライバ:DBNAME = $データベース"。 私の$ユーザーID = ""; 私の$パスワード= ""; 私の$ DBH = DBI->($のDSN、$ユーザーID、$パスワード、{RAISEERROR => 1})を接続 または$ DBI :: errstrは死にます。 印刷「オープンデータベースが正常に\ n "; 企業への私の$ stmtは= QQ(INSERT(ID、名前、年齢、住所、SALARY) VALUES(1、 'ポール'、32、 'カリフォルニア'、20000.00)); 私の$ RV = $は$ dbh->は、($のstmtは)を行うか、$ DBI :: errstrは死にます。 $のstmt = QQ(INSERT INTO COMPANY(ID、名前、年齢、住所、SALARY) VALUES(2、 'アレン'、25、 'テキサス'、15000.00)); $のRv = $は$ dbh->($のstmtは)を行うか、$ DBI :: errstrは死にます。 $のstmt = QQ(INSERT INTO COMPANY(ID、名前、年齢、住所、SALARY) VALUES(3、 'テディ'、23、 'ノルウェー'、20000.00)); $のRv = $は$ dbh->($のstmtは)を行うか、$ DBI :: errstrは死にます。 $のstmt = QQ(INSERT INTO COMPANY(ID、名前、年齢、住所、SALARY) VALUES(4、 'マーク'、25、 'リッチモンド」、65000.00);); $のRv = $は$ dbh->($のstmtは)を行うか、$ DBI :: errstrは死にます。 印刷「N \正常に作成されたレコード」。 $は$ dbh->切断();
上記のプログラムが実行され、それが与えられたレコードの会社テーブルに作成され、次の2行が表示されます。
データベース正常にオープン 正常に作成されたレコード
SELECT操作
次のPerlプログラムは、以前に作成したCOMPANYテーブルから取得する方法を示していますし、レコードを表示します。
#!/ usr / bin / perlの部分 DBIを使用します。 厳しい使用します。 私の$ドライバ= "SQLiteの"; 私の$データベース= "test.dbという"; 私の$ DSN = "DBI:$ドライバ:DBNAME = $データベース"。 私の$ユーザーID = ""; 私の$パスワード= ""; 私の$ DBH = DBI->($のDSN、$ユーザーID、$パスワード、{RAISEERROR => 1})を接続 または$ DBI :: errstrは死にます。 印刷「オープンデータベースが正常に\ n "; 私の$ stmtは= QQ(ID、名前、住所、会社から給与を選択します。); 私の$ 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 "; } 印刷「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操作
次のPerlコードは、任意のレコードを更新COMPANYテーブルから取得し、更新されたレコードを表示するには、UPDATEステートメントを使用する方法を示しています。
#!/ usr / bin / perlの部分 DBIを使用します。 厳しい使用します。 私の$ドライバ= "SQLiteの"; 私の$データベース= "test.dbという"; 私の$ DSN = "DBI:$ドライバ:DBNAME = $データベース"。 私の$ユーザーID = ""; 私の$パスワード= ""; 私の$ DBH = DBI->($のDSN、$ユーザーID、$パスワード、{RAISEERROR => 1})を接続 または$ DBI :: errstrは死にます。 印刷「オープンデータベースが正常に\ n "; 私の$ stmtは= QQ(UPDATE会社は、SALARY = 25000.00を設定する場所ID = 1;); 私の$ RV = $は$ dbh->は、($のstmtは)を行うか、$ DBI :: errstrは死にます。 ($のRV <0){場合 印刷$ DBI :: errstrは、 }エルス{ 印刷「更新された行の合計数:$のRVのの\ n "; } $のstmt = QQ(SELECT ID、名前、住所、会社から給与;); 私の$ 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 "; } 印刷「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操作
次のPerlコードDELETEステートメントを使用する方法を示しレコードをすべて削除し、その後COMPANYテーブルから取り出され、残りの記録が表示されます。
#!/ usr / bin / perlの部分 DBIを使用します。 厳しい使用します。 私の$ドライバ= "SQLiteの"; 私の$データベース= "test.dbという"; 私の$ DSN = "DBI:$ドライバ:DBNAME = $データベース"。 私の$ユーザーID = ""; 私の$パスワード= ""; 私の$ DBH = DBI->($のDSN、$ユーザーID、$パスワード、{RAISEERROR => 1})を接続 または$ DBI :: errstrは死にます。 印刷「オープンデータベースが正常に\ n "; 私の$ stmtは= QQ(ID = 2 COMPANYからDELETE;); 私の$ RV = $は$ dbh->は、($のstmtは)を行うか、$ DBI :: errstrは死にます。 ($のRV <0){場合 印刷$ DBI :: errstrは、 }エルス{ 印刷「削除された行の合計数:$のRVのの\ n "; } $のstmt = QQ(SELECT ID、名前、住所、会社から給与;); 私の$ 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 "; } 印刷「N \成功した操作 "; $は$ dbh->切断();
上記のプログラムが実行されると、次の結果を生成します。
データベース正常にオープン 削除された行の合計数:1 ID = 1 NAME =ポール ADDRESS =カリフォルニア州 SALARY = 25000 ID = 3 NAME =テディ ADDRESS =ノルウェー SALARY = 20000 ID = 4 NAME =マーク ADDRESS =リッチモンド SALARY = 65000 操作が正常に行われ