SQlite错误:“没有这样的表”

时间:2015-08-25 02:13:24

标签: ruby sqlite

我目前正在使用Ruby构建一个简单的银行程序。我已经设置了MVC风格。我收到以下错误消息。

/home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize': no such table: managers (SQLite3::SQLException)
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `new'
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `prepare'
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:134:in `execute'
from /home/devil/Desktop/RubyBank-manager_model/model.rb:19:in `initialize_database'
from /home/devil/Desktop/RubyBank-manager_model/model.rb:7:in `initialize'
from controller.rb:8:in `new'
from controller.rb:8:in `initialize'
from controller.rb:124:in `new'
from controller.rb:124:in `<main>'

当天早些时候该计划工作正常。我在控制器方法中更改了局部变量的名称,它开始向我提出上述错误。

我尝试过的事情都失败了:

  • 将我的SQlite gem文件更新为最新版本。

  • 从我的GitHub恢复之前提交的有效并尝试运行该程序的提交。

  • 仅将有问题的局部变量方法恢复为以前的功能名称。

  • 在Google上搜索我的内容。

为程序代码查看我的GITHUB:https://github.com/erikasland/RubyBank/tree/add_manager

1 个答案:

答案 0 :(得分:1)

看起来问题是在model.rb的第19行的this提交中创建的。您正试图通过从中选择来检查表是否存在:

managers_exist = db.execute("SELECT * FROM managers").length > 0

这可以通过查询架构而不是表来解决 - 您已使用accounts表成功完成此操作:

accounts_table_exists = db.execute("SELECT 1 FROM sqlite_master WHERE 
      type='table' AND name= ?", "accounts").length > 0

请注意,您选择的是sqlite_master,而不是accounts。你想要的是这样的:

managers_exist= db.execute("SELECT 1 FROM sqlite_master WHERE 
      type='table' AND name= ?", "managers").length > 0

但是,在我看来,CREATE TABLE IF NOT EXISTS方法可能是您实际需要的解决方案。