在我學習Ruby的嘗試中,我一直在閱讀Mr. Neighborly's Humble Little Ruby Book。爲什麼我的簡單Ruby SQLite3示例失敗?
大多數的例子已經很容易跟着給我一個很好的介紹,紅寶石,但我不能很容易地運行數據庫相關的例子。
我試圖運行此代碼:(從書中給出的例子稍作修改)
#!/usr/bin/ruby
require 'rubygems'
require 'dbi'
DBI.connect('DBI:SQLite3:testdb', 'ruby', 'ruby') do | dbh |
dbh.do('CREATE TABLE slugs(name varchar(20), age int);') rescue puts "TABLE slugs already exists."
sql = "INSERT INTO slugs (name, age) VALUES (?, ?)"
dbh.prepare(sql) do |st|
1.upto(20) do |i|
st.execute("slug #{i}", "#{i}")
end
end
end
運行時,它插入一行在數據庫中,那麼它給了我下面的錯誤:
/var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:41:in `bind_param': library routine called out of sequence (SQLite3::MisuseException) from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:41:in `bind_params' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:37:in `each' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:37:in `bind_params' from /var/lib/gems/1.8/gems/dbd-sqlite3-1.2.5/lib/dbd/sqlite3/statement.rb:71:in `bind_params' from /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:115:in `execute' from /media/dev/ruby-prax/moi.rb:12 from /media/dev/ruby-prax/moi.rb:11:in `upto' from /media/dev/ruby-prax/moi.rb:11 from /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/database.rb:61:in `prepare' from /media/dev/ruby-prax/moi.rb:10 from /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/driver.rb:41:in `connect' from /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:148:in `connect' from /media/dev/ruby-prax/moi.rb:5 TABLE slugs already exists.
我現在在Ubuntu 10.04上。 版本信息:
[email protected]:/media/dev/ruby-prax$ ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux] [email protected]:/media/dev/ruby-prax$ gem list *** LOCAL GEMS *** abstract (1.0.0) daemons (1.1.0) dbd-mysql (0.4.4) dbd-odbc (0.2.5) dbd-sqlite3 (1.2.5) dbi (0.4.5) deprecated (3.0.0, 2.0.1) erubis (2.6.6) eventmachine (0.12.10) extlib (0.9.15) json_pure (1.4.6) mysql (2.8.1) rack (1.2.1) sqlite3-ruby (1.3.2) thin (1.2.7) thor (0.14.1) [email protected]:/media/dev/ruby-prax$ sqlite3 --version 3.6.22 [email protected]:/media/dev/ruby-prax$
我在做什麼錯?
好拿起!但是,在改變它之後,它沒有任何區別。我看到完全一樣的行爲。實際上,對於sqlite3而言,無論我將列定義爲varchar還是int,對於這個簡單插入來說都沒有太大區別。我嘗試與slu((名字,年齡),仍然有同樣的錯誤。 – 2010-11-23 10:53:09
我希望它會給出同樣的錯誤,如果您嘗試傳遞「名稱」的數字,因爲這也是類型不匹配。名稱必須是一個字符串,並且年齡必須是整數/修訂號。 – 2010-11-23 16:39:38