问题虚拟背景:A项目组要实现一个基于Sql Server的应用,但工作环境只安装有MySql(公司对开源比较看好: )),而且客户有可能会转移到Oracle数据库环境。要求应用具有数据库移植能力和快速更换能力,使应用在工作环境调试成功后能迅速转移到客户的Sql Server环境,而且将来可以方便地转向Oracle。
Andy提出的可用方案:1、使用标准JDBC2、使用抽象类定义数据访问单元3、定义具体数据源访问单元继承2中接口
代码示例:定义数据访问单元抽象类,包含数据访问逻辑
定义具体数据源访问单元
在调用数据访问层时,可以声明一个DataManager的引用,然后在构造器中实例化为具体子类,如:
以后要迁移到另一个数据库(有JDBC驱动),只需定义具体子类继承DataManager(如HsqlDataManager),然后修改资源文件中的DataManager名称(或者将new的类名改一下),不需要修改代码。
这兴许可以解释另一个问题:不赞成使用存储过程,而应将SQL语句嵌在代码中(适用于Java;微软注定.Net不会有平台移植性,数据库大都用Sql Server,所以写存储过程还是比较好的)。(我在我的一个Eclipse RCP项目里使用了这种模式,从Sql server 2000到Hsql,特别方便,看起来感觉也比较好)欢迎大家拍转,^_^