使用ruby中的数组进行数据库查询

时间:2013-07-11 23:31:24

标签: ruby sqlite

我正在尝试在数组中查找所有具有值的行,这是我的代码

require 'sqlite3'
db = SQLite3::Database.new('test.sqlite')
res = db.query("SELECT w1.synsetid
                FROM words w1
                WHERE w1.wordid IN (?)", arr)

arr:字符串数组

我收到此错误

SQLite3::RangeException: bind or column index out of range

任何帮助?

1 个答案:

答案 0 :(得分:3)

query的第二个参数是一个占位符值数组:

  

- (Object) query(sql, bind_vars = [], *args)

     

这是一种创建语句绑定的便捷方法   参与其中,并调用execute:

query方法并不知道它应该特别处理您的arr数组,它只会看到一个占位符和多个值。

我认为你必须这么做:建立适当数量的占位符并将它们粘贴到SQL中。像这样:

placeholders = (['?'] * arr.length).join(',')
res = db.query("select ... where w1.wordid in (#{placeholders})", arr)

您确切知道placeholders中的内容,因此您在构建SQL时不必担心使用字符串插值和注入问题。

如果您已经使用Rails,那么您也可以使用ActiveRecord包装SQLite表,然后使用通常的ActiveRecord接口:

words = Word.where(:wordid => arr)