如何在Ruby On Rails中使用NuoDB手动执行SQL命令
我试图手动执行SQL命令,所以我可以在NuoDB中访问过程。
我正在使用Ruby on Rails,并使用以下命令:
ActiveRecord::Base.connection.execute("SQL query")
“SQL查询”可以是任何SQL命令。
例如,我有一个名为“反馈”的表,当我执行命令:
ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")
这只会返回一个“真实”的回应,而不是发送给我所有的数据。
这是在Rails控制台上的输出是:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks` => true
我想用这个在NuoDB中调用存储过程,但是在调用过程之后,这也会返回一个“真实”的响应。
有没有反正我可以执行SQL命令,并获得所需的数据,而不是得到一个“真实”的回应?
我用来执行自定义SQL语句的工作命令是:
results = ActiveRecord::Base.connection.execute("foo")
“foo”是sql语句(即“SELECT * FROM table”)。
这个命令将返回一组值作为哈希值,并将其放入结果variables中。
所以在我的rails application_controller.rb我加了这个:
def execute_statement(sql) results = ActiveRecord::Base.connection.execute(sql) if results.present? return results else return nil end end
使用execute_statement将返回find的logging,如果没有,则返回nil。
这样我可以在Rails应用程序的任何地方调用它,例如:
records = execute_statement("select * from table")
“execute_statement”也可以调用NuoDB程序,函数和数据库视图。
对我来说,我无法得到这个返回一个散列。
results = ActiveRecord::Base.connection.execute(sql)
但使用exec_query方法工作。
results = ActiveRecord::Base.connection.exec_query(sql)
重新发布我们论坛的答案,帮助他人解决类似的问题:
@connection = ActiveRecord::Base.connection result = @connection.exec_query('select tablename from system.tables') result.each do |row| puts row end
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
上面的代码是一个例子
- 在你的数据库连接上执行任意的SQL
- 之后将连接返回到连接池