c++ - 完全面向对象的 C++ SQL 包装器?

标签 c++ sql

<分区>

所以我正在寻找 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 中看到过类似的东西。

最佳答案

RogueWave 曾经(也许现在仍然)有这样的 C++ 数据库访问库——使用它简直就是 hell 。 SQL 是一种非常强大的语言,将它全部封装在 C++ 类中是一个非常困难的提议。另外,至少对我而言,您还没有明确说明您这样做的动机是什么。

关于c++ - 完全面向对象的 C++ SQL 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171975/

相关文章:

c++ - 使用 ofstream 保存文件

SQL Server getdate() 到像 "2009-12-20"这样的字符串

sql - 从表 A 中选择在表 B 中至少有 X 条记录的记录

c++ - 尝试获取 C++ switch 语句来识别空格、制表符等

c++ - CUDA 线程 block 中可能有负索引?

c++ - glReadPixels() "data"参数用法?

java - 递归反转链表的 C/C++ 到 Java 翻译

MySQL - 显示博客文件 : March 2012, 2012 年 4 月、2012 年 5 月

php - 触发多个 Action 和循环

php - mysql。随机订购位置和加入列表