Ruby를 배우려는 시도에서 나는 Mr. Neighborly's Humble Little Ruby Book을 읽었습니다.왜 간단한 Ruby SQLite3 예제가 실패합니까?
대부분의 예는, 나에게 루비에 대한 좋은 소개를주는 따라 매우 쉽게되었습니다하지만 난 쉽게 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': 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.
나는 현재 우분투 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$
내가 뭘 잘못하고 있니?
slugs(name varchar(20), age int);
하지만 당신은 삽입하려고 :
좋은 픽업! 그러나 그것을 바꾼 후에도 아무런 차이가 없었습니다. 나는 똑같은 행동을보고있다.사실 sqlite3의 경우 varchar 또는 int로 열을 정의하는지 여부에 관계없이이 간단한 삽입에 많은 차이가없는 것으로 보입니다. 나는 슬러그 (이름, 나이)를 시도했지만 여전히 같은 오류가 발생했습니다. –
형식 불일치이기 때문에 "name"에 숫자를 전달하려고해도 같은 오류가 발생합니다. 이름은 문자열이어야하며 나이는 정수/고정 숫자 여야합니다. –
테스트 중에 데이터베이스를 시작할 때 볼 수있는 또 다른 오류는 필드에 "고유"또는 "고유"절이있어 해당 필드를 고유 한 값으로 제한하는 것입니다. 순차 값을 삽입하려고 시도하는 코드를 다시 실행하면 DB가 미친 상태가되어 각 실행 전에 모든 행이 삭제됩니다. 그러나 "뚜렷한"절이있는 필드를 정의한 것으로 생각하지 않습니다. –