当前位置: 首页 > 工具软件 > Instant Rails > 使用案例 >

Rails连接oracle数据库

麹承
2023-12-01

Rails连接oracle数据库

使用rails项目连接oracle数据库时有2种方法

方法1

首先在自己本地的项目中引入两个gem
gem ‘activerecord-oracle_enhanced-adapter’, ‘~> 6.0.0’
gem ‘ruby-oci8’

gem 'activerecord-oracle_enhanced-adapter’它的版本选择可以直接去rubyGems.org文挡中去查看,根据你的rails版本走的

执行bundle

这个时候你会发现有报错,是安装ruby-oci8是报错了,所以你需要安装oracle的客户端和sdk

mac下载地址
https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
linux下载地址
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

当我们下载OCI 和 SDK之后进行解压,然后将还在路径放在终端的配置中,如果你是zsh就放在 .zshrc , 如果你是bash 就放在 .bashrc中

export OCI_DIR=/Users/instantclient_21_1
export PATH=$PATH:/Users/instantclient_21_1
export DYLD_LIBRARY_PATH=/Users/instantclient_21_1
export NLS_LANG=AMERICAN_AMERICA.UTF8

这些配置需要改成你自己文件放的位置,使用的是绝对路径,配置成功之后重新启动终端
这个时候bundle就不会报错了,可以顺利bundle成功

之后就项目中的配置了
首先我们在数库文件中添加配置(通过服务名进行连接的)(config/database.yml)
例如:

oracle_development:
  adapter: oracle_enhanced
  database: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='IP')(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)))
  username:  '用户名'
  password: '密码'

之后我们可以在项目中创建一个文件,可以在lib下创建,也可以在model下创建
我是在lib下创建了一个文件叫oracle_data.rb
在文件中这样写

module OracleData
  class Member < ActiveRecord::Base #Member为方法名,可自定义
    establish_connection :oracle_development # oracle_development 为database.yml文件中添加的第二个 DB 配置的名字
    self.table_name = '想要连接的表名'
  end

  class Good < ActiveRecord::Base #OracleExternalData为方法名,可自定义
    establish_connection :oracle_development # oracle_development 为database.yml文件中添加的第二个 DB 配置的名字
    self.table_name = '想要连接的表名'
  end
end

这个时候我们就可以通过rails的方法调用oracle数据库中的数据了

例如

OracleData::Member.first

这就像我们平时使用rails模型进行调用数据是一样滴

方法2

有的时候你会发现使用方法1是不好用,因为有数据库层的外键时rails调用会有写问题(这个问题还没有具体研究出解决方法)

但是我们可以通过另一种方法祢补一下,可以通过调用ORI8的实例

connection=OCI8.new("用户名","密码","IP:1521/ORCL")
#在依照官方文档的写法
connection.exec("SELECT * FROM tables rownum <= 10") do |r| p r; end
#这样就可以通过返回的数组对值进行操作

服务器上使用方法是一样的,只不过使用的客户端是linux就ok了

 类似资料: