rails项目连接oracle数据库的两种方法

2021-04-2011:41:34数据库教程Comments1,740 views字数 1446阅读模式

ails项目连接oracle数据库时有2种方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

方法1

首先在自己本地的项目中引入两个gem
gem ‘activerecord-oracle_enhanced-adapter’, ‘~> ’
gem ‘ruby-oci8’文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

gem 'activerecord-oracle_enhanced-adapter’它的版本选择可以直接去文挡中去查看,根据你的rails版本走的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

执行bundle文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

这个时候你会发现有报错,是安装ruby-oci8是报错了,所以你需要安装oracle的客户端和sdk文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

mac下载地址
https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
linux下载地址文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

当我们下载OCI 和 SDK之后进行解压,然后将还在路径放在终端的配置中,如果你是zsh就放在 .zshrc , 如果你是bash 就放在 .bashrc中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

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=文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

这些配置需要改成你自己文件放的位置,使用的是绝对路径,配置成功之后重新启动终端
这个时候bundle就不会报错了,可以顺利bundle成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

之后就项目中的配置了
首先我们在数库文件中添加配置(通过服务名进行连接的)(config/)
例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

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下创建了一个文件叫
在文件中这样写文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

moduleOracleDataclassMember<ActiveRecord::Base
    establish_connection :oracle_developmentself.table_name ='想要连接的表名'endclassGood<ActiveRecord::Base
    establish_connection :oracle_developmentself.table_name ='想要连接的表名'endend

这个时候我们就可以通过rails的方法调用oracle数据库中的数据了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

例如文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

OracleData::Member.first

这就像我们平时使用rails模型进行调用数据是一样滴文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

方法2

有的时候你会发现使用方法1是不好用,因为有数据库层的外键时rails调用会有写问题(这个问题还没有具体研究出解决方法)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

但是我们可以通过另一种方法祢补一下,可以通过调用ORI8的实例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

connection=OCI8.new("用户名","密码","IP:1521/ORCL")
connection.exec("SELECT * FROM tables rownum <= 10")do|r| p r;end

服务器上使用方法是一样的,只不过使用的客户端是linux就ok了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/21361.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/21361.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定