多数据库的访问
目的:在同一个应用中访问不同数据库,以在同一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,即回滚成功
奇怪,在公司里面怎么对两个数据库操作就是死活回滚不了,而在家里却可以。
分享到:
相关推荐
2. **缓存**: 通过缓存机制减少数据库访问次数,提高应用程序性能。 3. **复杂查询**: 利用ActiveRecord的查询构建器,可以构建复杂的SQL查询语句。 4. **多数据库支持**: 支持连接多个数据库,并能够在不同的数据库...
NHibernate支持二级缓存,通过缓存策略可以提升性能,减少对数据库的访问。常见的缓存提供商有NHibernate.Caches.SysCache(基于ASP.NET缓存)和NHibernate.Caches.CacheSharp(基于Memcached)。 7. **...
Castle.ActiveRecord.Generator 是一个基于 Castle ActiveRecord 框架的代码生成工具...通过学习和使用 Castle.ActiveRecord.Generator,你可以更快地构建起一个功能完备的、基于ActiveRecord模式的数据驱动应用程序。
5. 数据库事务处理:了解事务的概念,学习如何使用BEGIN、COMMIT和ROLLBACK确保数据的一致性,特别是在多用户并发操作的环境中。 6. ORM(Object-Relational Mapping)框架:ORM可以简化数据库操作,将数据库操作与...
3. **事务管理**:在C#中, Castle ActiveRecord支持嵌套事务和独立事务,通过透明的事务管理,保证了数据的一致性和完整性。 4. **查询API**:Castle ActiveRecord提供了强大的查询API,包括简单的属性查询、复杂...
这个框架借鉴了 Ruby on Rails 中的 ActiveRecord 模式,将业务对象与数据库记录关联起来,使得开发者可以更专注于编写业务逻辑,而不是数据库访问代码。本指南将深入探讨 Castle ActiveRecord 的核心概念、安装、...
在这个demo中,你可能会看到如`Route::get('user/:id', 'Index/index')`这样的代码,它定义了一个GET类型的路由,当用户访问'user/ID'时,会调用`Index`控制器的`index`方法,其中`:id`是一个参数,可以动态捕获URL...
10. **日志记录**:为了调试和性能分析,Castle ActiveRecord允许你配置日志输出,记录数据库访问、查询等信息。 通过阅读《Castle ActiveRecord手册》中的快速入门指南,你可以逐步了解并掌握这些概念,从而在.NET...
Java 敏捷持久层技术是现代软件开发中的一个重要组成部分,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据访问代码。在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on ...
通过学习和研究这个项目,开发者可以掌握如何利用Castle ActiveRecord简化数据库操作,实现对象关系映射,以及更好地理解在实际项目中如何组织和管理数据层代码。这不仅对于提升个人技能,对于团队协作和项目维护都...
通过学习和实践这些ActiveRecord的基本概念,开发者可以高效地进行数据库操作,同时减少与数据库的直接交互,提高代码的可读性和可维护性。在提供的压缩包"ActiveRecord简单实例代码"中,你可能会看到这些概念的具体...
Castle ActiveRecord 是一个面向对象的持久化框架,它建立在 NHibernate 之上,为.NET 开发者提供了一种简单的方式来将数据库操作与业务对象相结合。这个CHM帮助文档集合提供了全面的学习资源,包括经典示例和详细...
7. **事务管理**:ActiveRecord模式通常支持事务操作,确保一组数据库操作要么全部成功,要么全部失败。实例可能演示了如何在ASP.NET中使用事务确保数据一致性。 8. **错误处理和日志记录**:在实际项目中,我们...
此外,事务处理也是ORM工具的重要功能,Caste ActiveRecord 也提供了事务的开始、提交和回滚操作,确保数据的一致性。 在提供的压缩包文件“CasteRecord”中,可能包含了Caste ActiveRecord 的示例代码、文档或者是...
YII是一个高性能的PHP框架,它提供了许多用于快速开发微服务的工具和特性,如MVC(模型-视图-控制器)结构、数据库访问对象(DAO)、ActiveRecord模式等。 在PHP和YII中实现数据库服务客户端,我们首先需要配置...
首先,ActiveRecord是一种设计模式,它将数据库表的记录映射为类的对象,使得开发者可以通过操作对象属性和方法来完成对数据库的操作,降低了数据库访问的复杂性。Yii2框架原生就内置了强大的ActiveRecord实现,但这...
PDO是PHP中用于数据库访问的一个接口,提供了统一的方法来处理多种数据库,包括MySQL、SQLite、PostgreSQL等。由于某些情况下可能无法使用PDO,比如旧版本的PHP环境或特定服务器配置,这个库提供了一种替代方案,...
Multiverse是针对ActiveRecord的一个扩展,旨在解决Rails在处理多个数据库时的管理问题。默认情况下,Rails仅支持单个主数据库,但Multiverse允许开发者定义和管理多个数据库,使数据分片和扩展变得更加简单。 在...
ActiveRecord是一种设计模式,常用于数据库访问层,它将数据库中的表映射为对象,使得开发者可以使用面向对象的方式来操作数据库。在Java中,虽然原生并没有内置支持ActiveRecord的库,但我们可以根据这一思想自行...