English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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プログラムであり、PerlプログラムでSQLiteデータベースを使用する必要がある場合にご要望に応じます。詳細について知りたい場合は、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引数と第3引数を空白文字列に設定することができます。最後の引数は、さまざまな属性を渡すために使用されます。詳細は以下の例を参照してください。 |
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-この例程は、DBIを呼び出す前に閉じられます |
データベースの接続
#!/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 "データベースが正常にオープンされました\n";
以下のPerlコードは、既存のデータベースに接続する方法を示しています。データベースが存在しない場合、それが作成され、最終的にデータベースオブジェクトが返されます。 上記のプログラムを実行すると、以下の場所にテーブルが作成されます現在、上記のプログラムを実行し、現在のディレクトリにデータベースを作成します
。必要に応じてパスを変更できます。上記のコードを sqlite.pl ファイルに保存し、以下のように実行します。データベースが正常に作成された場合、以下のメッセージが表示されます: +$ chmod x sqlite.pl/$ . sqlite.pl
テーブルの作成
#!/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 "データベースが正常にオープンされました\n"; 以下のPerlコードセクションは、前に作成したデータベース内にテーブルを作成するために使用されます: my $stmt = qq(CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL,5ADDRESS CHAR( 0), my $rv = $dbh-SALARY REAL);); if($rv < 0){ print $DBI::errstr; >do($stmt); } else { } $dbh->disconnect();
print "Table created successfully\n"; 上記のプログラムを実行すると、以下の場所にテーブルが作成されます test.db
データベースを成功してオープンしました 以下に示すように、COMPANY テーブルを「中」に作成し、以下のメッセージを表示します:
テーブルが正常に作成されました注意:
以下のエラーがどの操作でも発生した場合:オペレーション中に以下のエラーが表示された場合:21DBD::SQLite::st execute failed: not an error( 398
) dbdimp.c 行-この場合、DBD内で既に利用可能です sqlite3_prepare() SQLite インストール中に利用可能な dbdimp.c ファイルがオープンされ、以下の場所に見つけられます -1最後に、関数を使用し、その第3引数0を変更します make および make install DBD::SQLiteをインストールすると、問題が解決します。 この場合、DBD内で利用可能なdbdimp.cファイルをオープンする必要があります-SQLite インストールおよび検出 sqlite3_prepare() function and change its third argument to -1 最后使用以下命令安装 DBD::SQLite 并将其第三个参数更改为 make 并执行 make install 以解决问题。
下面的 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 "データベースが正常にオープンされました\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; my $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; my $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; my $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 "记录创建成功\n"; $dbh->disconnect();
上述程序执行时,它会在 COMPANY 表中创建给定记录,并会显示以下两行:
データベースを成功してオープンしました 记录创建成功
下面的 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 "データベースが正常にオープンされました\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 "操作が正常に完了しました\n"; $dbh->disconnect();
このプログラムを実行すると、以下の結果が生成されます:
データベースを成功してオープンしました 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 操作が正常に完了しました
下面的 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 "データベースが正常にオープンされました\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 "更新行总数:$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 "操作が正常に完了しました\n"; $dbh->disconnect();
このプログラムを実行すると、以下の結果が生成されます:
データベースを成功してオープンしました 更新行总数: 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 操作が正常に完了しました
以下の 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 "データベースが正常にオープンされました\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 "削除された行の総数 : $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 "操作が正常に完了しました\n"; $dbh->disconnect();
このプログラムを実行すると、以下の結果が生成されます:
データベースを成功してオープンしました 削除された行の合計数 : 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 操作が正常に完了しました