`
酷的飞上天空
  • 浏览: 521781 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

ActiveRecord学习之多数据库访问和事务控制

阅读更多

多数据库的访问

 

目的:在同一个应用中访问不同数据库,以在同一controller的同一action中访问不同数据库为例

 

准备:

两个已经建立好的数据库

数据库一:db1,包含表bikes(字段为id,name)

数据库二:db2,包含表cars(字段为id,name)

 

database.yml文件添加如下内容

db1:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: db1
  pool: 5
  username: root
  password: 123456
  host: localhost
db2:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: db2
  pool: 5
  username: root
  password: 123456
  host: localhost

 

model如下

class Db1 < ActiveRecord::Base
  establish_connection :db1
  self.abstract_class = true
end
class Bike < Db1
end

class Db2 < ActiveRecord::Base
  establish_connection :db2
  self.abstract_class = true
end
class Car < Db2
end

 

即,为每个数据库建立一个继承自ActiveRecord::Base的类。在此数据库中的表所对应的模型则继承自相应的数据库类

 

测试代码如下:

D:\myruby\study\demo>ruby script/console
Loading development environment (Rails 2.3.8)
>> b = Bike.create({:name=>"bike"})
=> #<Bike id: 2, name: "bike">
>> Bike.find 2
=> #<Bike id: 2, name: "bike">
>> c = Car.create({:name=>"car"})
=> #<Car id: 2, name: "car">
>> Car.find 2
=> #<Car id: 2, name: "car">

 

 

数据库的事务

官方文档:http://api.rubyonrails.org/classes/ActiveRecord/Transactions.html

单个数据库的事务

代码如下

    Bike.delete_all
    
    Bike.transaction do
      Bike.create({:name=>"bike1"})
      Bike.create({:name=>"bike2"})
      raise ActiveRecord::Rollback #抛出异常,此异常仅仅让事务回滚
    end
    bikes = Bike.find :all
    @size = bikes.size

 

在页面显示 @size的值为 0

 

多个数据库的事务

 

代码如下:

    Bike.delete_all
    Car.delete_all
    begin
    Bike.transaction do
      Car.transaction do
        Bike.create({:name=>"bike"})
        Car.create({:name=>"car"})
        raise "test" #抛出异常
      end
    end
    rescue =>ex
      logger.debug "ex"
    end
    bikes = Bike.find :all
    cars = Car.find :all
    @size_b = bikes.size
    @size_c = cars.size

 

 

页面显示 0 0,即回滚成功

 

奇怪,在公司里面怎么对两个数据库操作就是死活回滚不了,而在家里却可以。

分享到:
评论

相关推荐

    Pro ActiveRecord Databases with Ruby and Rails.pdf

    2. **缓存**: 通过缓存机制减少数据库访问次数,提高应用程序性能。 3. **复杂查询**: 利用ActiveRecord的查询构建器,可以构建复杂的SQL查询语句。 4. **多数据库支持**: 支持连接多个数据库,并能够在不同的数据库...

    NHibernate中文教程+activerecord

    NHibernate支持二级缓存,通过缓存策略可以提升性能,减少对数据库的访问。常见的缓存提供商有NHibernate.Caches.SysCache(基于ASP.NET缓存)和NHibernate.Caches.CacheSharp(基于Memcached)。 7. **...

    简单Castle.ActiveRecord.Generator

    Castle.ActiveRecord.Generator 是一个基于 Castle ActiveRecord 框架的代码生成工具...通过学习和使用 Castle.ActiveRecord.Generator,你可以更快地构建起一个功能完备的、基于ActiveRecord模式的数据驱动应用程序。

    实战Mobile软件工厂之数据库篇

    5. 数据库事务处理:了解事务的概念,学习如何使用BEGIN、COMMIT和ROLLBACK确保数据的一致性,特别是在多用户并发操作的环境中。 6. ORM(Object-Relational Mapping)框架:ORM可以简化数据库操作,将数据库操作与...

    castle ActiveRecord 源代码

    3. **事务管理**:在C#中, Castle ActiveRecord支持嵌套事务和独立事务,通过透明的事务管理,保证了数据的一致性和完整性。 4. **查询API**:Castle ActiveRecord提供了强大的查询API,包括简单的属性查询、复杂...

    Castle ActiveRecord快速入门指南、ActiveRecord帮助文档

    这个框架借鉴了 Ruby on Rails 中的 ActiveRecord 模式,将业务对象与数据库记录关联起来,使得开发者可以更专注于编写业务逻辑,而不是数据库访问代码。本指南将深入探讨 Castle ActiveRecord 的核心概念、安装、...

    thinkphp5的demo,方便入门学习,含数据库

    在这个demo中,你可能会看到如`Route::get('user/:id', 'Index/index')`这样的代码,它定义了一个GET类型的路由,当用户访问'user/ID'时,会调用`Index`控制器的`index`方法,其中`:id`是一个参数,可以动态捕获URL...

    Castle ActiveRecord 手册

    10. **日志记录**:为了调试和性能分析,Castle ActiveRecord允许你配置日志输出,记录数据库访问、查询等信息。 通过阅读《Castle ActiveRecord手册》中的快速入门指南,你可以逐步了解并掌握这些概念,从而在.NET...

    Java敏捷持久层-ROR-ActiveRecord持久层框架的Java实现

    Java 敏捷持久层技术是现代软件开发中的一个重要组成部分,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据访问代码。在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on ...

    PetShop_Model_DAL.rar_CASTLE_Castle mod_activeRecord_castle d

    通过学习和研究这个项目,开发者可以掌握如何利用Castle ActiveRecord简化数据库操作,实现对象关系映射,以及更好地理解在实际项目中如何组织和管理数据层代码。这不仅对于提升个人技能,对于团队协作和项目维护都...

    ActiveRecord简单实例代码.zip

    通过学习和实践这些ActiveRecord的基本概念,开发者可以高效地进行数据库操作,同时减少与数据库的直接交互,提高代码的可读性和可维护性。在提供的压缩包"ActiveRecord简单实例代码"中,你可能会看到这些概念的具体...

    Castle ActiveRecord 最全的入门CHM帮助文档

    Castle ActiveRecord 是一个面向对象的持久化框架,它建立在 NHibernate 之上,为.NET 开发者提供了一种简单的方式来将数据库操作与业务对象相结合。这个CHM帮助文档集合提供了全面的学习资源,包括经典示例和详细...

    ASP.NET源码——ActiveRecord简单实例.zip

    7. **事务管理**:ActiveRecord模式通常支持事务操作,确保一组数据库操作要么全部成功,要么全部失败。实例可能演示了如何在ASP.NET中使用事务确保数据一致性。 8. **错误处理和日志记录**:在实际项目中,我们...

    Caste ActiveRecord

    此外,事务处理也是ORM工具的重要功能,Caste ActiveRecord 也提供了事务的开始、提交和回滚操作,确保数据的一致性。 在提供的压缩包文件“CasteRecord”中,可能包含了Caste ActiveRecord 的示例代码、文档或者是...

    微服务之数据库服务-客户端(PHP+YII)

    YII是一个高性能的PHP框架,它提供了许多用于快速开发微服务的工具和特性,如MVC(模型-视图-控制器)结构、数据库访问对象(DAO)、ActiveRecord模式等。 在PHP和YII中实现数据库服务客户端,我们首先需要配置...

    PHP库通过返回原始SQL来实现ActiveRecord 用于PHP5.3和NO PDO场景的yii2 ORM移植

    首先,ActiveRecord是一种设计模式,它将数据库表的记录映射为类的对象,使得开发者可以通过操作对象属性和方法来完成对数据库的操作,降低了数据库访问的复杂性。Yii2框架原生就内置了强大的ActiveRecord实现,但这...

    PHP 库通过返回原始 SQL 来实现 ActiveRecord

    PDO是PHP中用于数据库访问的一个接口,提供了统一的方法来处理多种数据库,包括MySQL、SQLite、PostgreSQL等。由于某些情况下可能无法使用PDO,比如旧版本的PHP环境或特定服务器配置,这个库提供了一种替代方案,...

    Ruby-Multiverse让Rails支持多数据库

    Multiverse是针对ActiveRecord的一个扩展,旨在解决Rails在处理多个数据库时的管理问题。默认情况下,Rails仅支持单个主数据库,但Multiverse允许开发者定义和管理多个数据库,使数据分片和扩展变得更加简单。 在...

    基于ActiveRecord思想开发的至简化的java的Orm框架.zip

    ActiveRecord是一种设计模式,常用于数据库访问层,它将数据库中的表映射为对象,使得开发者可以使用面向对象的方式来操作数据库。在Java中,虽然原生并没有内置支持ActiveRecord的库,但我们可以根据这一思想自行...

Global site tag (gtag.js) - Google Analytics