【发布时间】:2011-05-14 06:32:44
【问题描述】:
在尝试学习 Ruby 时,我一直在阅读 Mr. Neighborly's Humble Little Ruby Book。
大多数示例都很容易理解,让我很好地介绍了 Ruby,但是我无法轻松运行与 DB 相关的示例。
我正在尝试运行这段代码:(根据书中给出的示例稍作修改)
#!/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': 库例程调用乱序(SQLite3::MisuseException) 来自 /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:41:in `bind_params' 来自 /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:37:in `each' 来自 /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/statement.rb:37:in `bind_params' 来自 /var/lib/gems/1.8/gems/dbd-sqlite3-1.2.5/lib/dbd/sqlite3/statement.rb:71:in `bind_params' 来自 /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:115:in `execute' 来自/media/dev/ruby-prax/moi.rb:12 来自 /media/dev/ruby-prax/moi.rb:11:in `upto' 来自/media/dev/ruby-prax/moi.rb:11 来自 /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/database.rb:61:in `prepare' 来自 /media/dev/ruby-prax/moi.rb:10 来自 /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/driver.rb:41:in `connect' 来自 /var/lib/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:148:in `connect' 来自 /media/dev/ruby-prax/moi.rb:5 TABLE slug 已经存在。我目前使用的是 Ubuntu 10.04。 版本信息:
tlee@tim-ubuntu:/media/dev/ruby-prax$ ruby -v ruby 1.8.7 (2010-01-10 补丁级别 249) [x86_64-linux] tlee@tim-ubuntu:/media/dev/ruby-prax$ 宝石列表 *** 当地宝石 *** 摘要 (1.0.0) 守护进程 (1.1.0) dbd-mysql (0.4.4) dbd-odbc (0.2.5) dbd-sqlite3 (1.2.5) 分贝 (0.4.5) 已弃用(3.0.0、2.0.1) 厄鲁比斯 (2.6.6) 事件机(0.12.10) 扩展库 (0.9.15) json_pure (1.4.6) mysql (2.8.1) 机架 (1.2.1) sqlite3-ruby (1.3.2) 薄(1.2.7) 雷神(0.14.1) tlee@tim-ubuntu:/media/dev/ruby-prax$ sqlite3 --version 3.6.22 tlee@tim-ubuntu:/media/dev/ruby-prax$我做错了什么?
【问题讨论】: