rails项目连接oracle数据库的两种方法
ails项目连接oracle数据库时有2种方法
方法1
首先在自己本地的项目中引入两个gem
gem ‘activerecord-oracle_enhanced-adapter’, ‘~> ’
gem ‘ruby-oci8’
gem 'activerecord-oracle_enhanced-adapter’它的版本选择可以直接去文挡中去查看,根据你的rails版本走的
执行bundle
这个时候你会发现有报错,是安装ruby-oci8是报错了,所以你需要安装oracle的客户端和sdk
mac下载地址
https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
linux下载地址
当我们下载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=
这些配置需要改成你自己文件放的位置,使用的是绝对路径,配置成功之后重新启动终端
这个时候bundle就不会报错了,可以顺利bundle成功
之后就项目中的配置了
首先我们在数库文件中添加配置(通过服务名进行连接的)(config/)
例如:
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下创建了一个文件叫
在文件中这样写
moduleOracleDataclassMember<ActiveRecord::Base
establish_connection :oracle_developmentself.table_name ='想要连接的表名'endclassGood<ActiveRecord::Base
establish_connection :oracle_developmentself.table_name ='想要连接的表名'endend
这个时候我们就可以通过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了