Ruby 尝试插入SQLite数据库时是否可能返回布尔值?
我从命令行创建了一个SQLite数据库,其中包含以下列:标题、日期、url和位置。然后,我在标题、日期、url和位置上添加了一个唯一的约束,目的是防止插入相同的行 我插入了第一批数据,它工作得很好。为了测试唯一约束,我尝试重新插入所有数据,并获得:Ruby 尝试插入SQLite数据库时是否可能返回布尔值?,ruby,database,sqlite,sql-insert,sequel,Ruby,Database,Sqlite,Sql Insert,Sequel,我从命令行创建了一个SQLite数据库,其中包含以下列:标题、日期、url和位置。然后,我在标题、日期、url和位置上添加了一个唯一的约束,目的是防止插入相同的行 我插入了第一批数据,它工作得很好。为了测试唯一约束,我尝试重新插入所有数据,并获得: ...SQLite3::ConstraintException: UNIQUE constraint failed: events.title... 错误如预期 但是,我不希望程序在插入失败时停止运行,而是希望它返回Bool,以便在插入成功时可以增
...SQLite3::ConstraintException: UNIQUE constraint failed: events.title...
错误如预期
但是,我不希望程序在插入失败时停止运行,而是希望它返回Bool,以便在插入成功时可以增加一个名为newevents的变量
我是否需要更改数据库的设置方式,或者是否有办法做到这一点
顺便说一下,我正在使用Ruby和Sequel
下面是插入的源代码
newEventCount = 0
events.each do |event|
result = eventDB.insert(:title => event.get_title, :date => event.get_date, :url => event.get_url, :location => event.get_location)
if result == false
puts "Already have it"
else
newEventCount = newEventCount + 1
end
end
任何和所有的指导都是非常感谢的,如果这个问题看起来完全迟钝,请原谅我的无知。对我来说,使用数据库是一件很新鲜的事情 返回
false
意味着可以忽略错误,另外还意味着传播这些错误可能需要大量工作。异常会自动冒泡,如果它们到达顶部,就会发生这样的情况:您的程序崩溃
缓解这种情况的方法是处理异常:
events.each do |event|
begin
eventDB.insert(
title: event.get_title,
date: event.get_date,
url: event.get_url,
location: event.get_location
)
newEventCount += 1
rescue SQLite3::ConstraintException
# Already inserted, can be ignored.
end
end
拯救一个非常特定的、预期的异常的模式通常是必要的。返回
false
意味着可以忽略错误,而且传播这些错误可能需要大量工作。异常会自动冒泡,如果它们到达顶部,就会发生这样的情况:您的程序崩溃
缓解这种情况的方法是处理异常:
events.each do |event|
begin
eventDB.insert(
title: event.get_title,
date: event.get_date,
url: event.get_url,
location: event.get_location
)
newEventCount += 1
rescue SQLite3::ConstraintException
# Already inserted, can be ignored.
end
end
拯救一个非常特定的、预期的异常的模式通常是必要的。Ruby没有捕获异常的方法吗?我能想到的让数据库返回false而不是抛出异常的唯一方法是将其捕获在执行插入的存储过程中,但据我所知,sqlite不执行存储过程。显然ruby确实有处理异常的方法@tadman在下面解释说,Ruby没有捕获异常的方法吗?我能想到的让数据库返回false而不是抛出异常的唯一方法是将其捕获在执行插入的存储过程中,但据我所知,sqlite不执行存储过程。显然ruby确实有处理异常的方法@塔德曼在下面解释。啊,我明白了!这很有道理!非常感谢@tadman!啊,我明白了!这很有道理!非常感谢@tadman!