`
simohayha
  • 浏览: 1403645 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

ruby way之连接数据库

    博客分类:
  • ruby
阅读更多
这边都只是个大概,具体的要自己去看文档了.

1 连接SQLite:

require 'sqlite'

db = SQLite::Database.new("library.db")

db.execute("select title,author from books") do |row|

  p row

end

db.close


2连接mysql:

require 'mysql'

m = Mysql.new("localhost","name","password","maillist")
r = m.query("SELECT * FROM people ORDER BY name")
r.each_hash do |f|
  print "#{f['name']} - #{f['email']}"
end


3连接到PostgreSQL:

require 'postgres'
conn = PGconn.connect("",5432, "", "", "testdb")

conn.exec("create table rtest ( number integer default 0 );")
conn.exec("insert into rtest values ( 99 )")
res = conn.query("select * from rtest")
# res id [["99"]]


4 连接到LDAP:

ruby中至少有3种LDAP库这里只介绍两种:

conn = LDAP::Conn.new("rsads02.foo.com")

conn.bind("CN=username,CN=Users,DC=foo,DC=com","password") do |bound|
  bound.search("DC=foo,DC=com", LDAP::LDAP_SCOPE_SUBTREE,
               "(&(name=*) (objectCategory=person))", ['name','ipPhone']) do |user|
    puts "#{user['name']} #{user['ipPhone']}"
  end
end


require 'net/ldap'

ldap = Net::LDAP.new :host => server_ip_address,

      :port => 389,

      :auth => {

                  :method => :simple,

                  :username => "cn=manager,dc=example,dc=com",

                 :password => "opensesame"

      }

filter = Net::LDAP::Filter.eq( "cn", "George*" )

treebase = "dc=example,dc=com"

ldap.search( :base => treebase, :filter => filter ) do |entry|

  puts "DN: #{entry.dn}"

  entry.each do |attribute, values|

    puts "   #{attribute}:"

    values.each do |value|

      puts "      --->#{value}"

    end

  end

end

p ldap.get_operation_result


5 连接到oracle

我们可以使用OCI8库,它可以支持oracle8之后的版本:

require 'oci8'

session = OCI8.new('user', 'password')

query = "SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM DUAL"

cursor = session.exec(query)

result = cursor.fetch         # Only one iteration in this case

cursor.close

session.logoff


下面是查询的例子:

session = OCI8.new("user","password")
query = "select * from people where name = :name"

# One way...
session.exec(query,'John Smith')

# Another...
cursor = session.parse(query)
cursor.exec('John Smith')

# And another...
cursor = session.parse(query)
cursor.bind_param(':name','John Smith')  # bind by name
cursor.exec

# And another.
cursor = session.parse(query)
cursor.bind_param(1,'John Smith')        # bind by position
cursor.exec


6 使用DBI包装器

理论上,DBI允许你以数据库无关的方式存取你的数据库.不管你的数据库是Oracle, MySQL, PostgreSQL 还是其他,访问的代码都是一样的。他有时是不能处理比较复杂的或则某个数据库独有的特性。

这里假设我们使用的是oracle数据库:
require "dbi"

db = DBI.connect("dbi:OCI8:mydb", "user", "password")
query = "select * from people"

stmt = db.prepare(query)
stmt.execute

while row = stmt.fetch do
  puts row.join(",")
end

stmt.finish
db.disconnect


7 ORMs

ruby中有两种流行的orm框架ActiveRecord和Og。
ActiveRecord是以Martin Fowler所定义的ActiveRecord设计模式所命名的.每一个数据库表,都是一个继承ActiveRecord::Base的一个类.

require 'active_record'

ActiveRecord::Base.establish_connection(:adapter => "oci8",
                                        :username => "username",
                                        :password => "password",
                                        :database => "mydb",
                                        :host => "myhost")

class SomeTable < ActiveRecord::Base
  set_table_name "test_table"
  set_primary_key "some_id"
end

SomeTable.find(:all).each do |rec|
  # process rec as needed...
end

item = SomeTable.new
item.id = 1001
item.some_column = "test"
item.save


og和ActiveRecord 的不同是,后者主要是针对数据库,而前者主要是以面向对象为核心.

当我们需要定义一个存储的类时,我们能够使用property 方法:

class SomeClass
  property :alpha, String
  property :beta, String
  property :gamma, String
end


连接数据库:

db = Og::Database.new(:destroy  => false,
                      :name => 'mydb',
                      :store  => :mysql,
                      :user     => 'hal9000',
                      :password => 'chandra')


每一个对象都有一个save方法来插入数据库数据:

obj = SomeClass.new
obj.alpha  = "Poole"
obj.beta   = "Whitehead"
obj.gamma  = "Kaminski"
obj.save


还有一些描述传统数据库中的对象关系的方法:

class Dog
  has_one :house
  belongs_to :owner
  has_many :fleas
end







分享到:
评论
2 楼 夜鸣猪 2009-05-08  
赞啊,确实不错
1 楼 wdlfellow 2009-03-19  
在网上查了半天了,总算有人贴出来了,多谢了啊!

相关推荐

    Ruby 连接数据库资源汇总

    本资源汇总将详细介绍如何使用Ruby进行数据库连接,尤其是通过Ruby/DBI库。 首先,我们来了解一下Ruby/DBI(Database Independent Interface)。Ruby/DBI 是一个符合 DBI 模式(数据库独立接口)的库,它提供了一个...

    Ruby 版数据库连接池

    Ruby 版数据库连接池, 可以参考。 数据库是postgresql

    巧用Ruby配备Oracle数据库

    在这个文件中,你需要定义各个环境(如development、test和production)下的数据库连接参数。例如: ```yaml development: adapter: oci host: xe username: development password: password test: adapter: ...

    ruby和drizzle数据库的连接

    在IT行业中,数据库连接是开发过程中的重要环节,特别是在使用编程语言如Ruby进行Web开发时。本篇文章将深入探讨如何使用Ruby与Drizzle数据库建立连接,以及相关的源码和工具应用。 Ruby是一种动态、面向对象的编程...

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    ruby--dbi数据库操作gems相关

    DBI,全称“Database Independent Interface”,是Ruby中一个用于数据库操作的重要库。它提供了一个统一的接口,允许开发者通过简单的API与多种数据库系统进行交互,如MySQL、PostgreSQL、SQLite等,无需关心底层...

    The Ruby Way(第2版)

    The Ruby Way(第2版) &lt;br&gt;The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...

    Ruby-SequelRuby的数据库工具包

    此外,通过使用连接池,Sequel能够管理数据库连接,确保在高并发场景下的性能表现。 总的来说,Ruby-Sequel是一个全面的数据库工具包,无论是小型项目还是大型应用,都能提供高效、便捷的数据库访问能力。它的易用...

    Ubuntu 11.04安装Ruby on rails 连接MySQL数据库.pdf

    在Ubuntu 11.04环境中,安装MySQL数据库是部署Ruby on Rails应用的重要步骤之一。首先,通过打开终端并执行以下命令进行安装: ```bash sudo apt-get install mysql-server ``` 在安装过程中,系统会提示输入MySQL...

    Ruby连接Microsoft SQL Server数据库

    在Ruby中连接到Microsoft SQL Server数据库,你可以使用tiny_tds或者odbc等gem。附件是使用tiny_tds gem的一个基本示例 请将your_server_name、your_database_name、your_username、your_password和your_table_name...

    Ruby on rails 数据库详细配置

    总的来说,配置Ruby on Rails的数据库涉及到安装必要的数据库驱动和Rails框架,然后在`database.yml`文件中正确设定数据库连接参数。理解这个过程对于开发基于Rails的应用程序至关重要,因为这使得Rails能够与各种...

    Ruby-DataObjects企图重写现有的Ruby数据库驱动程序符合一个标准接口

    2. **连接管理(Connection Management)**:DataObjects提供了连接池管理功能,用于高效地管理和复用数据库连接,以提高性能并确保资源的有效利用。 3. **命令对象(Command Objects)**:这是执行SQL命令的对象,...

    巧用ruby配备oracle数据库.pdf

    由于目前尚未出现类似于Java瘦驱动的纯Ruby驱动程序,因此要使Ruby与Oracle数据库建立连接,就需要依赖于**Ruby/Oracle调用接口(OCI8)库**。这是一个基于Ruby/DBI(数据库接口模块)的数据库驱动程序,能够实现...

    Ruby on Rails:数据库设计与迁移教程.docx

    Ruby on Rails:数据库设计与迁移教程.docx

    Ruby-直系同源基因数据库

    Ruby直系同源基因数据库是一种基于Ruby编程语言构建的专业数据库系统,主要用于存储、管理和分析生物信息学中的直系同源基因数据。直系同源基因是指在进化过程中通过垂直遗传保持了相似序列的一组基因,它们反映了...

    Ruby-SQLite3Ruby绑定SQLite3嵌入式数据库

    Ruby-SQLite3是Ruby编程语言的一个扩展库,它提供了对SQLite3嵌入式数据库的直接访问。SQLite3是一款轻量级、自包含的数据库引擎,可以在无需服务器进程的情况下运行,广泛应用于移动设备、嵌入式系统以及桌面应用...

    巧用Ruby配备Oracle数据库.doc

    在Rails中,通过修改`config/database.yml`文件,可以轻松地配置Oracle数据库连接,使得Ruby on Rails应用能够与Oracle数据库进行数据交互。同时,注意保持数据库客户端库和Ruby/OCI8驱动的兼容性,以确保稳定的数据...

    rubywork ruby编程例子 逻辑 IO 数据库

    rubywork ruby编程例子 逻辑 IO 数据库rubywork ruby编程例子 逻辑 IO 数据库 rubywork ruby编程例子 逻辑 IO 数据库rubywork ruby编程例子 逻辑 IO 数据库rubywork ruby编程例子 逻辑 IO 数据库

Global site tag (gtag.js) - Google Analytics