工作场景:配置文件
比如redis的配置文件redis.conf里面包涵连接数据库需要的连接信息、用户名、用户密码等配置信息,每个用户都有这个可修改的配置文件进行数据库连接个性化配置(这份文件不能写死但大体内容类似),所以需要使用设计模式思想进行代码复用,这里采将会用设计模式里的单例模式
数据库配置文件复用写法(简化版)
#include <iostream>
//给用户一个config.txt文件,由用户自己修改文件需要个性化的值,只需要在当前代码中调入完成数据库的初始化配置
class SqlQuery
{
public:
//在构造类的时候传入连接信息,用户名,密码
SqlQuery(const std::string& conn, const std::string& username, const std::string& password)
{
m_conn = conn;
m_username = username;
m_password = password;
}
//一个查询数据库操作的成员函数
int query()
{
// 假装这里有实现。
return 0;
}
std::string m_conn;
std::string m_username;
std::string m_password;
};
//打开文件流的必要头文件
#include <fstream>
#include <iostream>
int main()
{
for (int i = 0; i < 100; i++) {
//数据库信息默认值
std::string conn = "mysql://localhost:3306/db/";
std::string username = "user";
std::string password = "password";
//一行一行的读取给用户个性化配置的文件的内容
std::fstream fs("D://Config/config.txt");
//读取数据的缓冲区
char tempStr[1024];
//当前读取数据的行数
int index = 0;
while (fs.getline(tempStr, 1024)) {
if (index == 0) {
conn = tempStr;
}
else if (index == 1) {
username = tempStr;
}
else if (index == 2) {
password = tempStr;
}
//循环读取每次加一行,直到读完
index++;
}
//打印数据
printf("conn: %s\n", conn.c_str());
printf("username: %s\n", username.c_str());
printf("password: %s\n", password.c_str());
//构建对象传入参数
SqlQuery query(conn, username, password);
// 查询操作
query.query();
}
std::cout << "C3_1\n";
}
上述传统文件配置是一种可行的方案,但存在缺点:同一用户每次连接相同的数据库的时候都需要从文件(磁盘中)中读取个性化的数据库配置文件,其实只需要保存一次或者从内存读取,否则数据库连接效率会大大降低
标签:std,username,string,数据库,模式,单例,password,conn From: https://www.cnblogs.com/Gal0721/p/17723115.html