尝试插入 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

拯救非常具体的预期异常的模式通常是必要的。