使用SQLite3(Ruby)的数据库未插入

使用SQLite3(Ruby)的数据库未插入,sql,ruby,database,sqlite,sqlite3-ruby,Sql,Ruby,Database,Sqlite,Sqlite3 Ruby,我正在学习一个教程,试图学习将Ruby连接到数据库的基础知识。目前,我有一个程序,使用twilio接收短消息,并根据您所说的内容发回消息。我试图使用SQLite3将电话号码和消息的许多其他部分存储到数据库中,但无论何时运行代码,数据库中都没有条目。给你 require 'twilio-ruby' require 'google_places' require 'sinatra' require 'dotenv' require 'sqlite3' begin db = SQLite3:

我正在学习一个教程,试图学习将Ruby连接到数据库的基础知识。目前,我有一个程序,使用twilio接收短消息,并根据您所说的内容发回消息。我试图使用SQLite3将电话号码和消息的许多其他部分存储到数据库中,但无论何时运行代码,数据库中都没有条目。给你

require 'twilio-ruby'
require 'google_places'
require 'sinatra'
require 'dotenv'
require 'sqlite3'

begin
    db = SQLite3::Database.open "test.db"
    db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)"
    begin
db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)"
db.execute("INSERT INTO Entries (Searched, Place, Number) VALUES(?,?,?)", @incoming, @best_place_fmt, @phonenumber)
rescue SQLite3::Exception => e 
    puts "Exception occurred"
    puts e
#ensure
#    stm.close if stm
#   db.close if db
end

所有的twilio函数都工作,接收消息并发送消息,但没有任何数据库命令实际编辑文件。谢谢你的帮助

当我执行与数据库相关的代码时,我没有收到任何错误,数据库已填充

如果我添加一个
选择类似于此代码的

require 'sqlite3'

begin
    db = SQLite3::Database.open "test.db"
    db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)"
    db.execute "INSERT INTO Entries(Searched) VALUES ('Is')"
    db.execute "INSERT INTO Entries(Place) VALUES ('This')"
    db.execute "INSERT INTO Entries(Number) VALUES ('Working')"
    (db.execute "Select * from Entries").each{|dataset|
      p dataset
    }
rescue SQLite3::Exception => e 
    puts "Exception occurred"
    puts e
#ensure
#    stm.close if stm
#   db.close if db
end
然后我得到:

[1, "Is", nil, nil]
[2, nil, "This", nil]
[3, nil, nil, "Working"]
您是如何看到数据库中没有条目的

您确定要检查正确的
test.db
?您可以使用
p Dir.pwd
检查实际目录


问题修改后的示例:

如果我接受insert命令,当变量有值时

结束

我的结果是:

 [1, "in", "fm", 123456789]

我在对这个问题的评论中问你是否想过ORM的用法。下面是sequel的一个例子,给你一个印象:

@incoming = 'in'
@best_place_fmt = 'fm'
@phonenumber = 123456789

require 'sequel'
db = Sequel.sqlite("test.db") #Here you could use also another DB
db.tables.each{|table| db.drop_table(table)}
db.create_table :entries2 do
  primary_key :id
  field :searched, :type => :text
  field :place, :type => :text
  field :number, :type => :blob
end
db[:entries2].insert(nil,@incoming, @best_place_fmt, @phonenumber)
puts db[:entries2].all #{:id=>1, :searched=>"in", :place=>"fm", :number=>"123456789"}

您好,欢迎来到SO——看起来twilio的东西与您所面临的问题基本无关,对吗?如果是这样的话,您可以通过将答案缩减到代码的DB位来简化回答者的工作(从而使您更有可能得到有用的回答)-查看更多信息:)您希望何时执行SQLite代码?当当前目录运行时,您希望它是什么?是否创建了
test.db
test.db
上的权限是什么?如果您将SQL粘贴到SQLite CLI中,SQL是否工作?除了您的实际问题之外:您是否考虑过使用类似(我最喜欢的)或(您不需要rails来使用它,ORM是独立的,可以在没有rails的情况下使用。)优点:您可以稍后更改数据库。是的,使用sqlite3 CLI时我没有打开数据库。我已经将代码更新到现在的版本,它创建了表,但是没有任何变量被放入数据库中。是否有特殊的方法将变量放入数据库条目?
@incoming = 'in'
@best_place_fmt = 'fm'
@phonenumber = 123456789

require 'sequel'
db = Sequel.sqlite("test.db") #Here you could use also another DB
db.tables.each{|table| db.drop_table(table)}
db.create_table :entries2 do
  primary_key :id
  field :searched, :type => :text
  field :place, :type => :text
  field :number, :type => :blob
end
db[:entries2].insert(nil,@incoming, @best_place_fmt, @phonenumber)
puts db[:entries2].all #{:id=>1, :searched=>"in", :place=>"fm", :number=>"123456789"}