51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师2021招募论坛版主项目为王,自动化测试提升加速器 !横扫BAT,Python全栈测试开发技能大全
【第124期】:怎样快速掌握测试工作中需用到..参与调查问卷 缔造行业趋势 大数据测试到底测什么? 【活动】为视频UP主打CALL,互动领福利!
查看: 10070|回复: 4

ruby连接数据库 oracle的方法之一:OCI8

[复制链接]

该用户从未签到

发表于 2009-9-18 17:38:37 | 显示全部楼层 |阅读模式
ruby-oci8 是 Ruby 使用 Oracle 的 OCI8 接口连接 Oracle 数据库的接口。

如果你是是有那个PL/SQL程序的话,就可以顺利的执行以下的步骤了,因为oci8会使用tnsname中的配置 通过PL/SQL访问数据库

a 使用该命令直接安装:gem install ruby-oci8
b 下载文件:http://rubyforge.org/projects/ruby-oci8/  
  B1.下载文件: ruby-oci8-1.0.6-mswin32.rb
     下载到本地后通过命令 执行rb文件:ruby ruby-oci8-1.0.6-mswin32.rb
  B2. 下载文件:ruby-oci8-1.0.6-x86-mswin32-60.gem
   ............................... N多安装方式
最新文件如下:  
    ruby-oci8-1.0.6-mswin.rb        56 KB        1,989        i386        Other
    ruby-oci8-1.0.6-x86-mswin32-60.gem        112 KB        780        i386        .gem (RubyGem)
    ruby-oci8-1.0.6.gem        116 KB        798        Any        .gem (RubyGem)
    ruby-oci8-1.0.6.tar.gz
安装成功后,验证是否连接通过,方法如下:
#使用的时候一定要加载oci8
require 'oci8'
#创建连接
conn = OCI8.new("用户名", "密码","oracle服务器名称")

a =[]
#执行查询操作
cursor = conn.exec('select * from 表名') { |r| a<<r; puts r.join('')}

puts r.join('')  主要是输出样式的问题 可以使用  puts r.to_s

函数用法如下:
1)OCI8.new
OCI8.new(userid, password, dbname = nil, privilege = nil)
connect to Oracle by userid and password. dbname is the connect string of Net8.
If you need DBA privilege, please set privilege as :SYSDBA or :SYSOPER.
If the Oracle client is 10g or later, you can use "//hostname_or_ip:port_no/oracle_sid" as dbname.

# sqlplus scott/tiger
conn = OCI8.new("scott", "tiger")

# sqlplus scott/tiger@orcl.world
conn = OCI8.new("scott", "tiger", "orcl.world")

# sqlplus 'sys/change_on_install as sysdba'
conn = OCI8.new("sys", "change_on_install", nil, :SYSDBA)

# sqlplus scott/tiger@//oracle_db.example.com/XE
conn = OCI8.new("scott", "tiger", "//oracle_db.example.com/XE")

2)exec

exec(sql, *bindvars)

如果你没有配置PL/SQL 没有本地的tnsname 后者不想使用本地的TNSname 就可以直自己去定义个函数:

def open_connection
    tnsnames = '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = somehost.somedomain.com)(PORT = 1521)) (CONNECT_DATA = (SID = some_sid)))'
    connection = OCI8.new('your_username', 'your_password', tnsnames)
end

至于open_connection函数后面是否需要配置参数,看项目需求了。如果你的项目数据库基本就是那么一个的话 就可以直接在里面定义了  

呵呵当然也可以传参数

数据库访问地址变化多的话 那就是要传参数了。。。


[ 本帖最后由 Spark.lee 于 2009-9-18 17:51 编辑 ]
回复

使用道具 举报

该用户从未签到

发表于 2010-1-5 10:17:04 | 显示全部楼层
有机会按照你的方法试试~
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-3-1 23:32:06 | 显示全部楼层
学习中
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-5-12 12:00:12 | 显示全部楼层
好强大的帖子
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-24 11:02:14 | 显示全部楼层
很好的帖子..支持
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2022-1-19 04:01 , Processed in 0.067250 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表