2013-09-22 33 views
0
sub connect_db { 
     my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database')) or 
       die $DBI::errstr; 

     return $dbh; 
} 

sub init_db { 
     my $db = connect_db(); 
     my $schema = read_file('./schema.sql'); 
     $db->do($schema) or die $db->errstr; 
} 


get '/' => sub { 
     my $db = connect_db(); 
     my $sql = 'select id, title, text from entries order by id desc'; 
     my $sth = $db->prepare($sql) or die $db->errstr; 
     $sth->execute or die $sth->errstr; 
     template 'show_entries.tt', { 
       'msg' => get_flash(), 
       'add_entry_url' => uri_for('/add'), 
       'entries' => $sth->fetchall_hashref('id'), 
     }; 
}; 

爲什麼重啓後系統中的數據庫沒有保存?大小數據庫不會增加。 爲什麼會發生這種情況?重新啓動後舞者不在sqlite中保存數據

+4

您的代碼不會將任何項目保存到數據庫。 – choroba

+0

你期望看到什麼保存到數據庫?沒有保存任何代碼的代碼。 'init_db()'子例程看起來像是要建立一個數據庫模式,但它不是從你向我們顯示的任何代碼中調用的。 –

+0

init_db()在代碼結尾處調用。怎麼做 ? –

回答

0

示例腳本https://github.com/PerlDancer/dancer-tutorial/blob/master/dancr.pl,你很可能使用,明確創建默認臨時目錄數據庫文件:

set 'database' => File::Spec->catfile(File::Spec->tmpdir(), 'dancr.db'); 

可能是你在配置清理/ tmp目錄(或者其他的臨時目錄系統是)重新啓動後,或者/ tmp位於內存文件系統上。

如果你想要一個持久數據庫,那麼改變數據庫的位置。

+0

然後,我有以下問題,爲什麼有必要創建一個數據庫使用此代碼$ cat - | sqlite3 database create table if not exists entries ( id integer primary key autoincrement, title string not null, text string not null ); ^D

+0

這是一個新問題。 –

相關問題