尝试插入 SQLite 数据库时可能 Return 布尔值?
Possible to Return a Bool Value When Attempting to Insert Into SQLite Database?
我使用以下列从命令行创建了一个 SQLite 数据库:标题、日期、url 和位置。然后我在标题、日期、url 和位置上添加了一个唯一约束,目的是防止插入相同的行。
我插入了第一批数据,效果很好。为了测试唯一约束,我尝试 re-insert 所有数据并得到一个:
...SQLite3::ConstraintException: UNIQUE constraint failed: events.title...
错误符合预期。
但是,我不希望程序在插入失败时停止 运行,而是希望它成为 return 一个 Bool,这样我就可以在插入时增加一个名为 new events 的变量成功的。
我是否需要更改设置数据库的方式,或者有什么方法可以做到这一点?
顺便说一句,我正在使用 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
拯救非常具体的预期异常的模式通常是必要的。
我使用以下列从命令行创建了一个 SQLite 数据库:标题、日期、url 和位置。然后我在标题、日期、url 和位置上添加了一个唯一约束,目的是防止插入相同的行。
我插入了第一批数据,效果很好。为了测试唯一约束,我尝试 re-insert 所有数据并得到一个:
...SQLite3::ConstraintException: UNIQUE constraint failed: events.title...
错误符合预期。
但是,我不希望程序在插入失败时停止 运行,而是希望它成为 return 一个 Bool,这样我就可以在插入时增加一个名为 new events 的变量成功的。
我是否需要更改设置数据库的方式,或者有什么方法可以做到这一点?
顺便说一句,我正在使用 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
拯救非常具体的预期异常的模式通常是必要的。