<分区>
所以我正在寻找 C++ 的 SQL 包装器,它可以完全隐藏任何文本 SQL 语句。我似乎找不到任何东西,我想知道为什么所有包装器似乎在某个时候都希望您编写文本 SQL 语句,例如:
SELECT * FROM stock WHERE item = 'Hotdog Buns'
这里以 MySQL++ 为例:
mysqlpp::Query query = conn.query("select * from stock where item = 'Hotdog Buns'");
对我来说最明显的方法是创建一个包含属性(列)的类,该类的每个实例都是一行。所以要执行上述查询,我会做类似的事情:
// Class defined something like this...
class stock_item : public sql::row
{
public:
stock_item() : m_name( NULL ), m_amount( 0 ) {};
~stock_item() {};
// Statically define the table
static void CreateTable( void )
{
// Some C++ reflective mechanism
sql::column( "name", char[50] );
sql::column( "amount", u32 );
}
private:
const char* m_name;
u32 m_amount;
}
// Then a table defined like this
sql::table<stock_item> stock;
// Query function defined something like this...
stock GetHotDogBuns( const stock& shopStock )
{
stock hotDogBuns = shopStock.Select( stock_item::Name(), "Hotdog Buns" );
return hotDogBuns;
}
现在我不是 SQL 专家,我也没有花很长时间思考上面的代码,但如果你有 C++ 背景而不是必须成为数据库专家,这似乎是处理数据库的一种合乎逻辑的方式.这种方法有什么问题?
是否有开源库允许您以类似的方式访问数据库?
编辑 我喜欢这样的东西的原因是使用我们的代码的 C++ 程序员不必学习 SQL 语法,并为他们提供更自然的编码环境。我在用 php 编写的 SilverStripe CMS 中看到过类似的东西。