如何在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;" ) } 

上面的代码是一个例子

  1. 在你的数据库连接上执行任意的SQL
  2. 之后将连接返回到连接池