如何在ruby中处理sqlite查询的结果?

如何在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 (

我面前有一个简单的任务,通过ruby的sqlite3库查询数据库中是否存在某一行。下面是我的尝试

必须有一种比下面更好(不那么冗长)的方法。这是怎么一回事?关于Ruby的“可枚举”类,有什么我应该关注的吗?通常如何确定sql结果的数据类型

#!/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使用,因此您必须知道您将得到什么。一般来说,通用数据库函数不需要调用
到*