如何在ruby中处理sqlite查询的结果?
我面前有一个简单的任务,通过ruby的sqlite3库查询数据库中是否存在某一行。下面是我的尝试 必须有一种比下面更好(不那么冗长)的方法。这是怎么一回事?关于Ruby的“可枚举”类,有什么我应该关注的吗?通常如何确定sql结果的数据类型如何在ruby中处理sqlite查询的结果?,ruby,types,sqlite,Ruby,Types,Sqlite,我面前有一个简单的任务,通过ruby的sqlite3库查询数据库中是否存在某一行。下面是我的尝试 必须有一种比下面更好(不那么冗长)的方法。这是怎么一回事?关于Ruby的“可枚举”类,有什么我应该关注的吗?通常如何确定sql结果的数据类型 #!/usr/bin/env ruby require 'sqlite3' db = SQLite3::Database.open "example.db" db.execute "create table if not exists example (
#!/usr/bin/env ruby
require 'sqlite3'
db = SQLite3::Database.open "example.db"
db.execute "create table if not exists example (id INTEGER PRIMARY KEY, words TEXT, whence DATETIME, number INT)"
words = "words"
begin
insert = db.prepare "insert into example (words,whence,number) values (?,?,?)"
insert.bind_param 1, words
insert.bind_param 2, Time.now.to_s
insert.bind_param 3, 42
insert.execute
rescue SQLite3::Exception => e
puts "Problem with insert"
puts e
end
begin
query = db.prepare "select count(*) as count from example where words = ?"
query.bind_param 1, words
rs = query.execute
#puts rs.first
res = rs.first.to_a
puts res
#if (rs.first.to_s.to_i > 0)
if (res.first.to_i > 0)
puts "rs.first greater than 0"
else
puts "it won't get here."
end
#if (rs.first == nil
# puts "result is nil"
#else
# puts "result is NOT nil"
#end
rescue SQLite3::Exception => e
puts "Problem with query"
puts e
end
实际上,您不必统计所有匹配的行,也不必查看所获取行的内容:
query = db.prepare "select 1 from example where words = ?"
query.bind_param 1, words
if query.execute.next
puts "found."
else
puts "it won't get here."
end
“没有必要查看已获取行的内容”。。。很好,您的回答向我强调了库返回了一个游标,但我的问题是“一般来说,我如何确定sql结果的数据类型?”SQLite使用,因此您必须知道您将得到什么。一般来说,通用数据库函数不需要调用
到*
。