1)
require 'sqlite3'
db = SQLite3::Database.new('development.sqlite3')
db.results_as_hash = true;
rows = db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ")
rows do |row|
id_num = row['id']
puts "Id = #{id_num}"
dupe_name = row['name']
puts "name = #{dupe_name}"
dupe_tel = row['telephone']
puts "tel = #{dupe_tel}"
dupe_lat = row['latitude']
puts "lat = #{dupe_lat}"
dupe_long = row['longitude']
puts "lat = #{dupe_long}"
puts '===end===='
end
2)
require 'sqlite3'
db = SQLite3::Database.new('development.sqlite3')
db.results_as_hash = true;
db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ") do |row|
id_num = row['id']
puts "Id = #{id_num}"
dupe_name = row['name']
puts "name = #{dupe_name}"
dupe_tel = row['telephone']
puts "tel = #{dupe_tel}"
dupe_lat = row['latitude']
puts "lat = #{dupe_lat}"
dupe_long = row['longitude']
puts "lat = #{dupe_long}"
puts '===end===='
end
The 2nd one works and the 1st one does not.
Why is that so? Doesn’t the db.execute function return a result set. If so why cant you loop through it?
Have you tried changing
rows do |row|torows.each do |row|for the first function?.With the first one you get a collection and assign it to
rows. You need to create a iterator for rows after that to loop trough the collection.The second function, .execute already returns a iterator.
More on Iterators