<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 使用 Perl 連接到 SQLite 數據庫 > 原文: [http://zetcode.com/db/sqliteperltutorial/connect/](http://zetcode.com/db/sqliteperltutorial/connect/) SQLite Perl 教程的這一部分將展示如何創建與數據庫的數據庫連接。 第一步是連接到數據庫。 我們使用`connect()` DBI 方法建立連接。 `disconnect()`方法用于關閉數據庫連接。 ```perl $dbh = DBI->connect($dsn, $username, $password) or die $DBI::errstr; $dbh = DBI->connect($dsn, $username, $password, \%attr) or die $DBI::errstr; ``` `connect()`方法建立與請求的數據源的數據庫連接。 如果連接成功,它將返回數據庫句柄對象。 我們使用`disconnect()`方法終止連接。 `$dsn`是數據源名稱。 它是一個字符串,告訴 Perl DBI 模塊,應加載哪種驅動程序以及將要建立連接的數據庫的位置。 ```perl dbi:DriverName:database_name dbi:DriverName:database_name@hostname:port dbi:DriverName:database=database_name;host=hostname;port=port ``` 上面的字符串是 Perl DBI 中數據源名稱的示例。 ```perl dbi:SQLite:dbname=test.db ``` 我們將使用此數據源名稱。 `dsn`始終以`dbi:`子字符串開頭。 然后我們有驅動程序名稱。 在我們的例子中,驅動程序名稱為 SQLite。 第三部分是數據庫名稱。 在本教程中,我們將使用`test.db`。 ```perl dbi:SQLite:dbname=:memory: ``` 我們還可以使用上述數據源名稱在內存中創建數據庫。 對于 SQLite 數據庫,我們不提供`$username`和`$password`。 數據庫不支持它。 我們在那兒留下了兩個空弦。 最后一個參數是對哈希的引用,在哈希中,我們可以設置屬性以更改連接的默認設置。 例如,`RaiseError`屬性可用于強制錯誤引發異常,而不是返回錯誤代碼。 `HandleError`屬性可用于提供子程序,以防發生錯誤。 `AutoCommit`屬性設置或取消設置自動提交模式。 `$DBI::errstr`是一個 DBI 動態屬性,它返回本地數據庫引擎錯誤消息。 如果連接失敗,則會顯示此消息,并且腳本將中止。 ## 版本 在第一個代碼示例中,我們將獲得 SQLite 數據庫的版本。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:SQLite:dbname=test.db", "", "", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare("SELECT SQLITE_VERSION()"); $sth->execute(); my $ver = $sth->fetch(); print @$ver; print "\n"; $sth->finish(); $dbh->disconnect(); ``` 在上面的 Perl 腳本中,我們連接到先前創建的`test.db`數據庫。 我們執行一條 SQL 語句,該語句返回 SQLite 數據庫的版本。 ```perl use DBI; ``` 我們使用 Perl DBI 模塊連接到 SQLite 數據庫。 ```perl my $dbh = DBI->connect( "dbi:SQLite:dbname=test.db", "", "", { RaiseError => 1 }, ) or die $DBI::errstr; ``` 在這里,我們連接到`test.db`數據庫。 第一個參數是數據源名稱。 在字符串中,我們指定數據庫驅動程序和數據庫名稱。 第二個和第三個參數為空。 在其他情況下,我們在那里提供用戶名和密碼。 最后一個參數是數據庫選項。 我們將`RaiseError`選項設置為 1。這將導致引發異常,而不是返回錯誤代碼。 ```perl my $sth = $dbh->prepare("SELECT SQLITE_VERSION()"); $sth->execute(); ``` `prepare()`方法準備一條 SQL 語句供以后執行。 `execute()`方法執行 SQL 語句。 ```perl my $ver = $sth->fetch(); ``` 我們獲取數據。 ```perl print @$ver; print "\n"; ``` 我們將檢索到的數據打印到控制臺。 ```perl $sth->finish(); ``` 在這里,我們指示將不再從此語句句柄中獲取任何數據。 ```perl $dbh->disconnect(); ``` 我們關閉與數據庫的連接。 ```perl $ ./version.pl 3.7.9 ``` 執行`verion.pl`腳本,我們得到 SQLite 數據庫的版本。 ## 插入數據 我們將創建一個`Cars`表并在其中插入幾行。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:SQLite:dbname=test.db", "", "", { RaiseError => 1} ) or die $DBI::errstr; $dbh->do("DROP TABLE IF EXISTS Cars"); $dbh->do("CREATE TABLE Cars(Id INT PRIMARY KEY, Name TEXT, Price INT)"); $dbh->do("INSERT INTO Cars VALUES(1,'Audi',52642)"); $dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)"); $dbh->do("INSERT INTO Cars VALUES(3,'Skoda',9000)"); $dbh->do("INSERT INTO Cars VALUES(4,'Volvo',29000)"); $dbh->do("INSERT INTO Cars VALUES(5,'Bentley',350000)"); $dbh->do("INSERT INTO Cars VALUES(6,'Citroen',21000)"); $dbh->do("INSERT INTO Cars VALUES(7,'Hummer',41400)"); $dbh->do("INSERT INTO Cars VALUES(8,'Volkswagen',21600)"); $dbh->disconnect(); ``` 上面的腳本創建一個`Cars`表,并將 8 行插入到該表中。 ```perl $dbh->do("CREATE TABLE Cars(Id INT PRIMARY KEY, Name TEXT, Price INT)"); ``` `do()`方法執行 SQL 語句。 它將兩個方法調用`prepare()`和`execute()`組合為一個調用。 `do()`方法用于非選擇語句。 ```perl $dbh->do("INSERT INTO Cars VALUES(1,'Audi',52642)"); $dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)"); ``` 這兩行將兩輛車插入表。 請注意,默認情況下,我們處于自動提交模式,其中對表的所有更改均立即生效。 ```perl sqlite> .mode column sqlite> .headers on ``` 我們使用`sqlite3`工具驗證寫入的數據。 首先,我們修改數據在控制臺中的顯示方式。 我們使用列模式并打開標題。 ```perl sqlite> SELECT * FROM Cars; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 ``` 這是我們已寫入`Cars`表的數據。 ## 最后插入的行 ID 有時,我們需要確定最后插入的行的 ID。 在 Perl DBI 中,我們使用`last_insert_id()`方法進行查找。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:SQLite:dbname=:memory:", "", "", { RaiseError => 1 }, ) or die $DBI::errstr; $dbh->do("CREATE TABLE Friends(Id INTEGER PRIMARY KEY, Name TEXT)"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Tom')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Rebecca')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Jim')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Robert')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Julian')"); my $id = $dbh->last_insert_id("", "", "Friends", ""); print "The last Id of the inserted row is $id\n"; $dbh->disconnect(); ``` 我們在內存中創建一個`Friends`表。 `Id`自動遞增。 ```perl $dbh->do("CREATE TABLE Friends(Id INTEGER PRIMARY KEY, Name TEXT)"); ``` 在 SQLite 中,`INTEGER PRIMARY KEY`列自動增加。 還有一個`AUTOINCREMENT`關鍵字。 在`INTEGER PRIMARY KEY AUTOINCREMENT`中使用時,會使用稍微不同的算法來創建`Id`。 ```perl $dbh->do("INSERT INTO Friends(Name) VALUES ('Tom')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Rebecca')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Jim')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Robert')"); $dbh->do("INSERT INTO Friends(Name) VALUES ('Julian')"); ``` 這五個 SQL 語句將五行插入到`Friends`表中。 ```perl my $id = $dbh->last_insert_id("", "", "Friends", ""); ``` 使用`last_insert_id()`方法,我們獲得最后插入的行 ID。 ```perl $ ./lastrowid.pl The last Id of the inserted row is 5 ``` 我們看到了腳本的輸出。 ## 取得數據 在本章的最后一個示例中,我們獲取一些數據。 有關數據獲取的更多信息將在“查詢”一章中進行討論。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:SQLite:dbname=test.db", { RaiseError => 1 } ) or die $DBI::errstr; my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id=1" ); $sth->execute(); my ($id, $name, $price) = $sth->fetchrow(); print "$id $name $price\n"; my $fields = $sth->{NUM_OF_FIELDS}; print "We have selected $fields field(s)\n"; my $rows = $sth->rows(); print "We have selected $rows row(s)\n"; $sth->finish(); $dbh->disconnect(); ``` 在示例中,我們從`Cars`表中獲取一行。 我們還將找出我們選擇了多少字段&行。 ```perl my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id=1" ); $sth->execute(); ``` 我們使用`prepare()`方法準備一條 SQL 語句。 SQL 字符串被發送到 SQLite 數據庫引擎進行處理。 檢查其語法和有效性。 該方法返回一個語句句柄。 然后執行 SQL 語句。 準備將數據發送到客戶端程序。 ```perl my ($id, $name, $price) = $sth->fetchrow(); print "$id $name $price\n"; ``` 使用`fetchrow()`方法從數據庫中檢索數據。 該方法以 Perl 列表的形式從表中返回一行。 ```perl my $fields = $sth->{NUM_OF_FIELDS}; ``` `NUM_OF_FIELDS`是一個語句句柄屬性,它為我們提供了返回字段的數量。 在我們的情況下,我們返回了三個字段:`Id`,`Name`和`Price`。 ```perl my $rows = $sth->rows(); ``` 我們得到選定的行數。 我們僅從表中檢索到一行。 `rows()`方法返回受影響的行數。 它可以用于`SELECT`,`UPDATE`和`DELETE SQL`語句。 ```perl $ ./fetchrow.pl 1 Audi 52642 We have selected 3 field(s) We have selected 1 row(s) ``` `fetchrow.pl`腳本的輸出。 在 SQLite Perl 教程的這一章中,我們展示了如何建立與 SQLite 數據庫的數據庫連接。 我們已經解釋了對數據庫進行一些基本工作的腳本。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看