Latest web development tutorials

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 & 描述
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() 打开的数据库连接。

データベースへの接続

次の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

操作が正常に行われ