I recommend avoiding writing the original SQL, and at that age I would use ORM, even for simple database use. I highly recommend using the Sequel gem. Borrowing from in Sequel docs:
sequel sqlite://temp Your database is stored in DB...
Using SQLite, which launched the ORM sequel interactively and created an SQLite database called "temp".
ruby-1.9.2-p290 :001 > require 'logger' => true ruby-1.9.2-p290 :002 > DB.loggers << Logger.new(STDOUT) => [#<Logger:0x0000010160bc40 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x0000010160bc18 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000010160bbc8 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000010160bba0 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000010160bb50>>>>]
This allowed us to keep a journal so we can see what Sequel will do when it talks to the database.
ruby-1.9.2-p290 :003 > items = DB[:items]
Doh! I forgot to create a table ...
ruby-1.9.2-p290 :005 > DB.create_table :items do ruby-1.9.2-p290 :006 > primary_key :id ruby-1.9.2-p290 :007?> String :name ruby-1.9.2-p290 :008?> Float :price ruby-1.9.2-p290 :009?> end I, [2011-11-25T10:17:20.985851
Created table.
ruby-1.9.2-p290 :010 > items = DB[:items]
This created a dataset, which is just a convenient way to talk to a table.
And, what is the gain:
ruby-1.9.2-p290 :011 > items.insert(:name => "Joan d'Arc") I, [2011-11-25T10:17:45.186945
ORM automatically deletes characters for you. Your work is greatly simplified.
ORM is DBM, so they know when to run for a particular database. Your code does not change. It is trivial to switch from SQLite to MySQL, Postgres, or even non-SQL databases.