代码之家  ›  专栏  ›  技术社区  ›  Sauron J.Vassallo

使用SQL查询访问另一个数据库

  •  0
  • Sauron J.Vassallo  · 技术社区  · 11 年前

    我正在尝试访问我的rails应用程序中的另一个数据库,以及使用SQL语句查询该数据库并返回JSON。

    主数据库和辅助数据库位于运行MySQL的同一服务器上。测试时,看看这是否只起到以下作用:

    datagbase.yml文件:

    development:
      adapter: mysql2
      encoding: utf8
      database: onlineportal
      username: root
      password: 
      host: 127.0.0.1
      port: 3306
      socket: 
    
    android_mobile_developement:
      adapter: mysql2
      encoding: utf8
      database: androidchatterdatabase
      username: root
      password: 
      host: 127.0.0.1
      port: 3306
      socket:
    

    但随后在控制器中构建该方法:

    class RequestsController < ApplicationController
         def getActivatedFriends
            @results = User.find_by_sql("SELECT 
                                            a.id
                                         ,  a.username
                                         ,  a.phoneNumber
                                         FROM androidchatterdatabase.users a
                                         WHERE phoneNumber in (8754444444) and
                                               removed = 0 and
                                               is_user = 1;")
    
            respond_to do |format|
                format.html
                format.json { render json: { friends_match: @results }}
            end         
           end
    

    并调用路由:

    localhost:3000/getActivatedFriends/
    

    从路线:

    match '/getActivatedFriends/', to: 'requests#getActivatedFriends', via: 'get'
    

    产生误差:

    Missing template requests/getActivatedFriends, application/getActivatedFriends with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   OmK    11 年前

    发送请求时,将其作为本地主机发送:3000/getActivatedFriends.json。控制器将以这种方式响应json请求。默认情况下,它响应html请求。

        2
  •  1
  •   David542    11 年前

    您可以通过在表前面指定数据库名称来访问另一个数据库,例如:

    SELECT * FROM onlineportal.table
    - or -
    SELECT * FROM androidchatterdatabase.table
    

    这就是你想要做的吗?如果它们在同一台服务器上,则此语法将起作用。