使用IBPP在C++中操作FireBird/Interbase数据库 您所在的位置:网站首页 mysql创建主键自增的表 使用IBPP在C++中操作FireBird/Interbase数据库

使用IBPP在C++中操作FireBird/Interbase数据库

2023-11-23 15:30| 来源: 网络整理| 查看: 265

转载地址:http://blog.sina.com.cn/s/blog_648d306d0100swhc.html

FireBird是一种小巧的关系型数据库,它有多种版本,包括服务器版(象MySQL),单机版(象Access)以及嵌入式(象SQLite)。而且不管是服务器版还是嵌入式版它都完整支持视图、触发器、存储过程等SQL高级特性。

问题是它提供的C API“不太友好”,不容易掌握(特别是我),所以我一直只会在C++Builder里编程使用FireBird(因为FireBird源于 Borland的InterBase,VCL库自带了InterBase的组件),直到有一天我发现了IBPP...

IBPP是 一个FireBird/Interbase数据库API的C++包装,使用起来也比较简单,只要把IBPP源码目录里的 "core/all_in_one.cpp"加入工程,在代码中包含头文件"ibpp.h",最后根据操作系统预定义一个IBPP_WINDOWS或 IBPP_UNIX的宏即可。

另外,当然还要安装FireBird客户端,如果只是学习,我们可以下载嵌入式版本。IBPP首先要找到FireBird的动态库,在Windows下, IBPP在下面的路径中查找:

在程序目录下查找fbembed.dll 在程序目录下查找fbclient.dll 依据DefaultInstance注册表键值查找fbclient.dll 在系统定义位置查找fbclient.dll 在系统定义位置查找gds32.dll

FireBird主页:http://www.ibphoenix.com

IBPP主页:http://www.ibpp.org

关于FireBird的中文教程我推荐姚启红编著的《Borland InterBase7.0 应用开发指南》(网上一找一大堆)。

例一,基本应用 #include  #include  using namespace std;   //数据库名,根据你的情况更改。 const char* g_szDBName = "d:\\test.fdb"; //服务器名,针对服务器版本。对于嵌入式,它应该是"" const char* g_szServerName = "";   //这里的用户名和密码是FireBird默认值,对于服务器版,用你自己的密码 //对于嵌入式,就是这个(FireBird嵌入式版没有加密功能)。 const char*    g_szUserName = "SYSDBA"; const char* g_szPassword = "masterkey";   int main() {     IBPP::Database db = IBPP::DatabaseFactory(g_szServerName,         g_szDBName,         g_szUserName,         g_szPassword);     //建立数据库     db->Create(3);     //连接数据库     db->Connect();       IBPP::Transaction tr = IBPP::TransactionFactory(db);     tr->Start();     try{         IBPP::Statement st = IBPP::StatementFactory(db,tr);         //建立数据表         st->Execute(             "CREATE TABLE TESTTABLE("             "    ID INTEGER NOT NULL PRIMARY KEY,"             "    RNO VARCHAR(10) NOT NULL UNIQUE,"             "    SHIFT VARCHAR(5) NOT NULL"             "        CHECK(SHIFT IN('A','B','C','D')),"             "    LINE CHAR(20) NOT NULL,"             "    SL COMPUTED BY(SHIFT||'.'||LINE),"             "    EMP CHAR(20)"             "    )"             );         tr->CommitRetain();         //插入数据,华安和小强         st->Execute(             "INSERT INTO TESTTABLE(ID,RNO,SHIFT,LINE,EMP)"             "VALUES(1,'B9527','B','DAZHA','Hua,An')"         );         st->Execute(             "INSERT INTO TESTTABLE(ID,RNO,SHIFT,LINE,EMP)"             "VALUES(2,'B9528','B','ZHUANGSI','Xiao,Qiang')"         );           tr->CommitRetain();         //插入数据,石榴和祝枝山         st->Execute(             "INSERT INTO TESTTABLE(ID,RNO,SHIFT,LINE,EMP)"             "VALUES(3,'B9525','A','DAZHA','Shi,Liu')"         );         //SHIFT只能是ABCD,看看写X会有什么情况发生         st->Execute(             "INSERT INTO TESTTABLE(ID,RNO,SHIFT,LINE,EMP)"             "VALUES(4,'B9526','X','DAZHA','Zhu,ZiShang')"         );         tr->Commit();     }     catch(IBPP::SQLException &e){         cerr              string rno, emp;             st->Get("RNO",rno);             st->Get("EMP",emp);             cout      IBPP::Database db;     db = IBPP::DatabaseFactory(g_szServerName,         g_szDBName,         g_szUserName,         g_szPassword);     //连接数据库     db->Connect();       IBPP::Transaction tr = IBPP::TransactionFactory(db);     tr->Start();     try{         IBPP::Statement st = IBPP::StatementFactory(db,tr);         //建立数据表         st->ExecuteImmediate(             "CREATE TABLE BlobTable("             "    ID INTEGER NOT NULL,"             "    RES BLOB)"             );         //生成器         st->ExecuteImmediate(             "CREATE GENERATOR BlobTable_ID_Gen"             );         //触发器         st->ExecuteImmediate(             "CREATE TRIGGER BlobTable_BI_ID FOR BlobTable "             "ACTIVE BEFORE INSERT POSITION 0 "             "AS "             "BEGIN "             "    IF(NEW.ID IS NULL) THEN "             "        NEW.ID = GEN_ID(BlobTable_ID_Gen, 1); "             "END"         );         tr->CommitRetain();                 st->Prepare("INSERT INTO BlobTable(RES) VALUES(?)");         assert(1 == st->Parameters());         //插入Blob,一块100字节的内存         {             IBPP::Blob res = IBPP::BlobFactory(db,tr);             res->Create();             char buf[100];             for(int i=0; iWrite(buf,sizeof(buf));             res->Close();             st->Set(1,res); //第一个问号             st->Execute();         }         //插入Blob,一串字符串         {             st->Set(1,string("HAHAHAHAHAHA..."));             st->Execute();         }         tr->Commit();     }     catch(IBPP::SQLException &e){         cerr              int id;             IBPP::Blob res = IBPP::BlobFactory(db,tr);               st->Get(1,id);             st->Get(2,res);                         //显示Blob内容             res->Open();             int size;             res->Info(&size,NULL,NULL);             cout          cerr 


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有