0

我想使用<<and>>运算符加载并保存到外部数据库。外部数据库必须实现什么才能使其工作?

想法或经验?我正在使用 SQL 与我的 sqlite3 数据库进行交互。

例如,我想说:

MyClass c;
c >> databaseInstance;
c << databaseInstance;
4

2 回答 2

3

databaseInstance需要是某种类型,提供以您想要的方式写入数据库的函数,从而提供类似流的接口operator>>operator<<这些函数的定义有点像这样:

database_type& operator<<(database_type& databaseInstance, MyClass& c)
{
  // Write to database here
  return databaseInstance;
}

database_type& operator>>(database_type& databaseInstance, MyClass& c)
{
  // Read from database here
  return databaseInstance;
}

这利用了运算符重载。没有什么比这更多的要说的了,使用数据库是一件很奇怪的事情,因为数据库不像流。

为了与 C++ 标准库保持一致,您可能希望反转运算符的使用:

MyClass c;
databaseInstance << c;
databaseInstance >> c;

但是,不确定最后一行将读入您的MyClass对象的确切内容。databaseInstance只有在将其配置为插入特定表时,第二行才真正有意义。

于 2012-11-26T17:38:51.783 回答
1

唔。有趣的..

好的,我假设您只想在 operator>> 的情况下从数据库中选择,而在 operator<< 的情况下插入/更新。这里的诀窍是知道要读/写哪些列。

您可以使用流操纵器(例如将整数输出转换为十六进制格式的“十六进制”)来确定要使用的列,因此您将拥有类似

int c;
DBStreamInterface db(tableA);
c << columnA << db;

或者您可以定义一个与表具有相同布局的结构类型,并将整行读入其中:

struct TableRow {
  int columnA;
  string columnB;
};
TableRow t << db;

但是您必须小心将数据库中的架构与结构的定义相匹配(除非您想全力以赴地生成模板代码,您可以通过读取架构 DDL 并动态分配来创建适当的结构类构造函数中每个字段的存储)。

于 2012-11-26T18:36:47.920 回答