gpt4 book ai didi

c++ - sqlite 表代码管理器?

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:18 25 4
gpt4 key购买 nike

对 sqlite(和 sql)相当陌生。我有几个表需要用几个列名生成,这些列名可以随着我的代码(在 C++ 中)而改变。我如何管理它们?我做对了吗?一定有更好的实用程序代码。

编辑:具体来说,我想通过在编译时抽象表名和字段名来避免运行时错误(例如使用#defines,但也许其他更好)。

例如我目前正在考虑创建一个 TableHandler 类,它将:

sqlite *db; 
....
TableHandler tb("TableName");
tb.addField("FirstName", "TEXT");
tb.addField("Id", "INTEGER");

tb.createTable(db); //calls sqlite3_exec("create table TableName(FirstName TEXT, Id INTEGER)");

tb.setEntry("FirstName", "bob");
tb.addEntry(); //calls sqlite3_exec("insert ...");

tb.createCode(stdout);
//this will generate
/*
#define kTableName "TableName"
#define kFirstName "FirstName"
#define kId "Id"
...anything else useful?
*/

最佳答案

我问了一个类似的问题,但被否决了,所以我删除了它。如果您有兴趣,我写了一些代码来插入。但我同意静态 SQL 语句不太容易出错的负面评论。更不用说更少的 CPU 密集度了。

对于插入,我采用了 std::stringstd::set。第一个字符串是列名,第二个字符串是它的值。并且查询返回了类似的结构。我玩过 std::mapstd::vectorstd::unordered_set 它们在这里都有不同的好处。

如果你能找到一个小型实用程序,它会很棒,它可以读取一个类的定义并为你编写所有的 SQL。我开始这个并放弃了,因为解析 C++ 头文件变得复杂,我可以在未来的项目中节省时间。

已添加

std::string Insert(std::string table, std::vector< std::pair<std::string,std::string> >  row)
{
if (row.size()==0 || table.size()==0)
return "";

std::stringstream name,value;
auto it = row.begin();
name << "INSERT INTO " << table.c_str()<<"('" << (*it).first << "'";
value << "VALUES('" <<(*it).second << "'";

for ( ; it < row.end(); it++)
{
name << ", '" << (*it).first << "'";
value << ", '" <<(*it).second << "'";
}

name << ") ";
value << ");";
name << value.str();

return name.str();
}

关于c++ - sqlite 表代码管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com