简单工厂模式的应用(简单实现ODBC/JDBC驱动管理器)

标签: DesignPattern(程序设计的指导思想) DesignPattern(程序设计的指导思想)
5人阅读 评论(0) 收藏 举报
分类:
class CDbConn{
public:
    CDbConn(const char* lpszConn);
    bool Open();
    bool Close();
};
class CDbRs{
};
//抽象产品类
class CAbsDb{
protected:
    CDbConn* pConn;
public:
    CAbsDb(const char* lpszConn);
    ~CAbsDb();
    //执行SQL语句,返回结果集
public:
    virtual CDbRs* Execute(const char* lpszSql) = 0;
};

//MSSql数据库
class CSqlServer : public CAbsDb{
public:
    CSqlServer(const char* lpszConn);
    CDbRs* Execute(const char* lpszSql);
};
//Oracle数据库
class COracle : public CAbsDb{
public:
    COracle(const char* lpszConn);
    CDbRs* Execute(const char* lpszSql);
};
//Access数据库
class CAccess : public CAbsDb{
public:
    CAccess(const char* lpszConn);
    CDbRs* Execute(const char* lpszSql);
};
//工厂类
class CDbFac{
public:
    static CAbsDb* GetDb(const char* lpszConn);

};



//*********************************************************************
CDbConn::CDbConn(const char* lpszConn){}
bool CDbConn::Open(){cout << "Open DB Successfully !" << endl; return true;}
bool CDbConn::Close(){cout << "Close DB Successfully !" << endl; return true;}


//抽象产品类
CAbsDb::CAbsDb(const char* lpszConn)
{
    printf("%s\n", lpszConn);
    pConn = new CDbConn(lpszConn);
    pConn->Open();
}
CAbsDb::~CAbsDb()
{
    if(pConn != NULL){
        pConn->Close();
        delete pConn; pConn = NULL;
    }
}
//执行SQL语句,返回结果集

//MSSql数据库
CSqlServer::CSqlServer(const char* lpszConn) : CAbsDb(lpszConn) {}
CDbRs* CSqlServer::Execute(const char* lpszSql)
{
    printf("SqlServer : %s\n", lpszSql);
    return NULL;//示例,实际中要返回结果集,new CRecordSet();
}
//Oracle数据库
COracle::COracle(const char* lpszConn) : CAbsDb(lpszConn){}
CDbRs* COracle::Execute(const char* lpszSql)
{
    printf("Oracle : %s\n", lpszSql);
    return NULL;//示例,实际中要返回结果集,new CRecordSet();
}

//Access数据库
CAccess::CAccess(const char* lpszConn) : CAbsDb(lpszConn) {}
CDbRs* CAccess::Execute(const char* lpszSql)
{
    printf("Access : %s\n", lpszSql);
    return NULL;//示例,实际中要返回结果集,new CRecordSet();
}

//工厂类
CAbsDb* CDbFac::GetDb(const char* lpszConn)
{
    CAbsDb* pDb = NULL;
    if(strcmp(lpszConn, "SqlServer") == 0)        pDb = new CSqlServer(lpszConn);
    else if(strcmp(lpszConn, "Oracle") == 0)        pDb = new COracle(lpszConn);
    else if(strcmp(lpszConn, "Access") == 0)    pDb = new CAccess(lpszConn);
    return pDb;
}

//客户端调用例子
void main()
{
    //利用工厂方法模式切换数据库
    CAbsDb* pDb = CDbFac::GetDb("SqlServer");//在这里更改数据库!
    if(pDb != NULL){
        cout << "Once Connected, Many Times Execute" << endl;
        cout << "**********************************************" << endl;
        pDb->Execute("Select * From Student");
        pDb->Execute("Update Student Set Sage = Sage + 1");
        pDb->Execute("Delete From Student");
        cout << "**********************************************" << endl;
        delete pDb; pDb = NULL;
    }
}




查看评论

设计模式之简单工厂模式详解与应用(1)

设计模式分为三大类: 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式重要性:对于设计、对于理解框架、对于面试、对于工作
  • 2018年01月21日 23:47

ODBC、JDBC和四种驱动类型

早期的数据库开发领域没有通用的应用程序编程接口,开发人员在使用不同数据库产品时,必须学习和使用厂商专用API,例如Oracle Call Interface、Microsoft Database Li...
  • autfish
  • autfish
  • 2016-08-10 16:49:38
  • 4647

[AnyDAC][Phys][ODBC][Microsoft][ODBC 驱动管理器]在指定的DSN中,驱动程序和应用程序体系结构不

使用plsql的odbc导入器的时候会出现该问题: 原因是我是64位的系统!!! 解决方法: 1.运行C:\Windows\SysWOW64\odbcad32.exe,打开后如下图所示: 驱动...
  • long_ge_cool
  • long_ge_cool
  • 2016-01-07 14:22:57
  • 5858

odbc连接dbf表出现 [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能” 错误的解决方法

 原来是操作系统升级到win2003后机器上的foxpro的odbc驱动太新了。不支持老式的访问驱动了。 需要从一个xp系统上复制一个dll到win2003系统中覆盖,dll的名称是vfpodbc.d...
  • precipitant
  • precipitant
  • 2006-09-11 14:36:00
  • 9510

其他信息: ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

程序再win7 32 位上面运行正常,但是64位系统上面运行报如上错误 其他信息: ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应...
  • dt168
  • dt168
  • 2016-05-24 11:02:32
  • 3006

使用JDBC和 JDBC-ODBC驱动连接数据库

1、    JDBC-ODBC  驱动  来访问SQLServer2008数据库      JDBC-ODBC访问数据库原理                   JSP程序-->J...
  • yue7603835
  • yue7603835
  • 2011-11-20 23:18:29
  • 5503

加载JDBC-ODBC驱动器和连接数据库

各种数据库加载的时候总是记不住,所以就总结了三个。加载注册MySQL驱动器://加载mysql driver类 Class.forName("com.mysql.jdbc.Driver");//Cla...
  • Hackgr
  • Hackgr
  • 2016-08-08 19:32:17
  • 837

水晶报表 创建odbc数据源出现 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 问题解决

1)环境Windows Server 2008R2 64bit+Mysql 5.5.16 for 32 bit+Mysql odbc connector 64 bit2)报错信息在指定的 DSN 中,...
  • zhangj391
  • zhangj391
  • 2016-07-19 23:05:37
  • 278

JAVA使用ODBC连接数据库抛错问题 [Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓

困扰N多人的典型的数据源问题,所有一切设置好之后运行程序之后会出现如下类似的报错: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的字符串...
  • woailuo453786790
  • woailuo453786790
  • 2015-04-18 08:35:12
  • 2414

关于JDBC和JDBC-ODBC连接数据库

  本来之前已经配置成功了,后来重装XP系统后,忘记了之前的步骤,弄了大半天,才重新配置好。  要用JDBC连接数据库,先要安装SQLServer2000 的JDBC驱动,安装完后在安装目录的lib文...
  • lyq32
  • lyq32
  • 2007-04-10 22:43:00
  • 1172
    个人资料
    等级:
    访问量: 2001
    积分: 1154
    排名: 4万+
    文章存档