# topdbs **Repository Path**: wanghuiming/topdbs ## Basic Information - **Project Name**: topdbs - **Description**: topdbs是统一的c++的通用数据库连接库,目前已支持informix、mysql、oracle、sqlite3、postgresql、odbc等数据库连接。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 5 - **Created**: 2023-02-15 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # topdbs #### 介绍 topdbs是一个统一封装的c++通用数据库连接库,目前已支持informix、mysql、oracle、sqlite3、postgresql、odbc等数据库连接。 功能特性: 1. 支持informix、mysql、oracle、sqlite3、postgresql、odbc等数据库连接(可根据需求灵活扩展其它数据库支持); 2. 精简的API接口,连接与会话操作分离; 3. 支持全局实例及连接池; 4. 支持简单读写分离; 5. 支持数据库的存储过程调用处理(暂时只支持MYSQL); 6. 提供数据库密码加/解密功能,对数据库密码进行加密成密文,直接通过密文直接进行数据库连接; 7. 支持内部日志调试功能,根据日志级别打印输出日志; 8. 支持函数参数连接以及根据配置化参数连接; 9. 提供C调用接口; 10. 提供简单的数据库操作客户端工具dbsql; #### 更新日志 1. add windows platform building support #### 安装教程 1. cd topdbs_v2 2. mkdir build 3. cmake .. #默认只支持SQLITE,可自定义增加编译选项支持其它数据库:-DENABLE_USE_MYSQL=ON or -DENABLE_USE_INFORMIX=ON等 4. make install ##编译前需要提前指定对应的环境变量设置,参考:topdbs.env 编译依赖说明: 1. oracle-依赖occi库 2. pqxx--依赖pqxx库 3. mysql--依赖mysql C API 4. informix--依赖informix csdk c++ 5. odbc--依赖unixODBC #### 使用说明 1. 基本查询 #include "topdbs.hpp" int main() { string dbstring = "192.168.147.128:3306@aipsdb"; string user = "aips"; string pass = "123456"; SQLConnection dbsConn; if(dbsConn.connect(topdbs_mysql,dbstring,user,pass) != 0) { printf("connect database error:%s\n",dbsConn.getErrors().c_str()); return -1; } SQLSession dbsCmd(&dbsConn); if( dbsCmd.Execute("select * from topdbs_test") != 0) { printf("execute sql error:%s\n",dbsConn.getErrors().c_str()); return -1; } while(dbsCmd.FetchNext()) { dbsCmd.GetField("key1",val1); dbsCmd.GetField("key2",val2); } return 0; } 2. 预处理 #include "topdbs.hpp" int main() { string dbstring = "192.168.147.128:3306@aipsdb"; string user = "aips"; string pass = "123456"; SQLConnection dbsConn; if(dbsConn.connect(topdbs_mysql,dbstring,user,pass) != 0) { printf("connect database error:%s\n",dbsConn.getErrors().c_str()); return -1; } SQLSession dbsCmd(&dbsConn); const char* insertsql="insert into topdbs_test values (?,?,?,?)"; dbsCmd.setCommandText(insertsql,eDBSCommandType_t::DBS_CmdSQLStmt); if(dbsCmd.Prepare()) { printf("prepare error:%s\n",dbsConn.getErrors().c_str()); return -1; } dbsCmd.BindParams(0,"topdbs001"); dbsCmd.BindParams(1,"test1"); dbsCmd.BindParams(2,"1"); dbsCmd.BindParams(3,"2"); if( dbsCmd.Execute() != 0) { printf("execute sql error:%s\n",dbsConn.getErrors().c_str()); return -1; } return 0; } 3. 全局实例 #include "topdbs.hpp" int init_database() { eDBSClient_t dbsClient = topdbs_oracle; string dbstring = "192.168.147.129:1521@orcl"; string user = "aips"; string pass = "aips"; if( SQLConnectionSington::InitEnv(dbsClient,dbstring,user,pass) != 0) { printf("InitEnv failed!!!\n"); return -1; } printf("InitEnv topdbs connection inst succed.\n"); return 0; }; int main() { if(init_database() != 0) { printf("init_databse error\n"); return -1; } auto pConn = SQLConnectionSington::GetInstance(); if(!pConn) { printf("GetInstance failed!!!\n"); return -1; } SQLSession dbsCmd(pConn); const char* updatesql="update topdbs_test set val = '100' where name = 'topdbs002'"; dbsCmd.setCommandText(updatesql); if( dbsCmd.Execute() != 0) { printf("execute sql error:%s\n",dbsConn.getErrors().c_str()); return -1; } return 0; } #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)