菜单

数据库接口(Sqlite,MySQL···)

下载

前言

下面将讲解数据库的一些基本的接口的基本展开与用法,目前支持支持 sqlite, mysql, mssql, pgsql, redis

接口定义

c++ 复制代码
/**
 * @brief 打开数据库
 * @param url : 	sqlite~文件路径 	| mysql~ip地址 				| postgresql~连接串,如("host=127.0.0.1 port=5432 dbname=msdf user=postgres password=123456")
 * @param uid : 	sqlite~无效 		| mysql~用户名(标准认证模式) 	| postgresql~无效
 * @param pwd : 	sqlite~无效 		| mysql~密码 				| postgresql~无效
 * @param dbname : 	sqlite~无效 		| mysql~数据库 				| postgresql~无效
 * @param port: 	sqlite~无效 		| mysql~端口  				| postgresql~无效
 * @return 		成功1 失败0
 */
virtual bool connect(string url, string uid, string pwd, string dbname, int port = 0) = 0;
/**
 * @brief 插入记录
 * @param sql	insert语句
 * @return 		成功"1" 失败"0"
 */
virtual bool insert(string sql) = 0;
/**
 * @brief 更新记录
 * @param sql	update\delete语句
 * @return 		成功1 失败0
 */
virtual bool execute(string sql) = 0;
/**
 * @brief 更新批量记录
 * @param	sqls	update\delete语句数组
 * @return			成功1 失败0
 */
virtual bool execute(list<string>& sqls) = 0;
/**
 * @brief 查询
 * @param sql	select语句
 * @return 		返回TTable表
 */
virtual TTable query(string sql) = 0;
virtual void query(string sql, TTable* table) = 0;
/**
 * @brief 关闭数据库
 * @return		成功1 失败0
 */
virtual bool close() = 0;
/**
 * @brief 返回数据库对象
 * @return 		各子类返回自己的数据库对象,如sqlite3*, redisContext*, PGconn*
 */
virtual void * getDb() = 0;
/**
 * @brief 创建Statement对象
 * @return 		各子类返回自己的Statement对象
 */
virtual void * getStatement(string sql) = 0;
/**
 * @brief 关闭Statement对象
 */
virtual void closeStatment() = 0;
/**
 * @brief 启动事务
 */
virtual void begin_transaction() = 0;
/**
 * @brief 若事务启动,则提交事务
 */
virtual void commit_transaction() = 0;
/**
 * @brief 回滚事务
 */
virtual void rollback_transaction() = 0;
/**
 * @brief 获取数据库类型
 * @return
 */
virtual uint8_t getDBType() = 0;
/**
 * @brief 设置连接、响应超时时间(ms)
 * @param connect 连接超时时间(sqlite不用设连接超时)
 * @param responce 响应超时时间
 */
virtual void setTimeout(int connect, int response);
/**
 * @brief 连接是否alive
 */
virtual bool isConnectionAlive();

/** @brief 上次操作的信息码。见相应数据库的信息码*/
int infoCode;
/** @brief 上次操作的信息码意义。见相应数据库的信息码意义 */
string infoContent;
/**连接超时,单位ms*/

使用方法

变量的取用同函数,可以参考数据库使用

对于操作信息码返回 not an error 说明

部分用户使用时在使用 execute 执行查询语句操作时,明明执行成功了,但是返回值却为0,读取到的 infoContent 为not an error。其实该返回信息并不是一个错误,只要能保证到使用 query 函数时能正确获取到表格数据,那么执行就是成功的。

数据库管理器接口定义

c++ 复制代码
/**
 * @LEVEL0
 * @brief 动态加载对应的动态库后,打开并连接数据库。如dbid已经存在,则直接已经存在的数据库类指针
 * 若dbid已存在,则取相应的数据库连接。若不存在,先根据后面的参数连接,再取该连接
 * 全部为默认值时,即getdb(),取系统的sqlite数据库(default.db)
 * @param dbid 		自定义的id。不为空时其他(MYSQL,PG,MSSQL,REDIS)数据库,为空时,取系统的默认sqlite数据库default.db
 * @param dbtype	数据库类型,见常量DBTYPE(支持sqlite,mysql,mssql,postgre,redis)
 * @param url		数据库服务器ip。其中:当dbtype==T_SQLITE时,为文件路径。
 * 		当dbtype==T_POSTGRESQL时为连接串,如("host=127.0.0.1 port=5432 dbname=msdf user=postgres password=123456)
 * @param port		端口号。当dbtype==T_SQLITE时,无效。(mysql 3306, mssql 1433, postger 5432, redis 6379)
 * @param uid		用户名。当dbtype==T_SQLITE时,无效。注意MySQL服务器的用户验证方式要设为标准
 * @param pwd		密码。当dbtype==T_SQLITE时,无效。
 * @param dbname	数据库系统中的数据库名称。
 * @return 连接成功,返回数据库指针;连接失败,返回NULL
 *
 * @warning getdb会产生一个指针,在close后,需用delete清理
 */
static IDatabase* getdb(string dbid = "", uint8_t dbtype = DBTYPE::SQLITE3
    , string url = "", int port = 3306, string uid = "", string pwd = "", string dbname = "") ;
/**
 * @brief 释放各数据库的动态链接库
 * @param dbname	释放的数据库对象名(nullptr:所有)
 */
static void release(string dbname);

/**
 * @brief 将自带的sqlite数据库恢复出厂设置
 * @param drop	清除已有数据
 */
static void restore(bool drop = true);

/**
 * @brief 获取当前可用种子
 * @param seed	种子字符串
 * @return		返回同一个种子调用getSeed的次数(记录保存在默认数据库中)
 */
static string getSeed(string seed);

/**
 * 退出程序时应调用一下,确保事务提交。
 */
static void commitAll();
/**
 * 退出程序时,应调用一下,确保连接关闭
 */
static void closeAll();
static void rollbackAll();
/**
 * @LEVEL0
 * @brief 移出map。关闭连接后调用
 */
static void remove(IDatabase* db);
//static string getId(IDatabase* db);
/**
 * @brief 数据库是否被打开,是则返回指针,否则返回NULL
 */
static IDatabase* isDbConnected(const string& path);

使用方法

可以参考数据库使用

最近修改: 2025-01-09Powered by