我正在尝试数据库操作。例如,
begin
db_con = PG.connect :dbname => 'sureshkumar', :user => 'sureshkumar'
db_con.prepare 'get_result', "SELECT * from users;"
users_name = db_con.exec_prepared 'get_result'
if users_name != nil
puts users_name.values
else
puts "There is no users available in the table users"
end
rescue PG::Error => e
puts e.message
ensure
db_con.close if db_con
end
表users
只包含两列。他们是,
user_id
user_name
如果表不包含任何行,则exec_prepared
语句不会返回任何行。在这种情况下,为什么if条件不会变错?如何检查exec_prepared
方法是否不返回任何行?
答案 0 :(得分:2)
users_name = db_con.exec_prepared 'get_result'
永远不会将nil
返回users_name
。
根据PG::Connection#exec_prepared
的文档,它将返回PG::Result
个对象。因此,users_name
对象永远不会是nil
。它始终是PG::Result
的实例。
因此,要检查查询执行是否返回任何行,您需要检查此PG::Result
对象中是否包含任何值。在您的情况下,users_name
变量包含PG::Result
。因此,您必须在其上调用ntuples
,以便查看从查询返回的行数。
所以将你的if子句改为:
if users_name.ntuples > 0
puts "There are users"
else
puts "There is no users available in the table users"
end
请参阅PG::Result
's documentation,了解您可以调用其他方法来访问结果。