Matlab模板模式(Template)

由于不同的数据库SQL语法存在差异,在替换数据库时需要更改程序大量的SQL语句,而模板模式能够将零散的并且随数据库变化的SQL语句提取出来,提高了软件的可移植性和兼容性,本文依据http://www.w3school.com.cn/sql/sql_top.asp上面给出的语法,设计出了模板模式:

模板方法类:

classdef SQLTemplate < handle
    methods(Abstract,Access=protected)
        run_top_sql(obj,top_number,table_name);
    end   
    methods
        function run_top(obj,top_number,table_name)
            try
                obj.begin_conn();
                obj.begin_tran();
                obj.run_top_sql(top_number,table_name);
                obj.commit_tran();
            catch
                obj.rollback_tran();
            end
            obj.end_conn();
        end
        function begin_conn(~)
            disp('开启数据库连接');
        end
        function begin_tran(~)
            disp('开启事务');
        end
        function commit_tran(~)
            disp('提交事务');
        end
         function rollback_tran(~)
            disp('回滚事务');
        end
        function end_conn(~)
            disp('关闭数据库连接');
        end
    end
end

具体实现类--MySQL类:

classdef MySQL < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select * from ',table_name,' limit ',num2str(top_number)]);
         end
    end  
end

具体实现类--Oracle类:

classdef Oracle < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select * from ',table_name,' where ROWNUM <= ',num2str(top_number)]);
         end
    end  
end

具体实现类--SQLServer类:

classdef SQLServer < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select top ',num2str(top_number),' * from ',table_name]);
         end
    end  
end

结果测试:

>> a=MySQL();
>> a.run_top(7,'task')
开启数据库连接
开启事务
select * from task limit 7
提交事务
关闭数据库连接
>> b=Oracle();
>> b.run_top(7,'task')
开启数据库连接
开启事务
select * from task where ROWNUM <= 7
提交事务
关闭数据库连接
>> c=SQLServer();
>> c.run_top(7,'task')
开启数据库连接
开启事务
select top 7 * from task
提交事务
关闭数据库连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值