Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite的一个好的OO C++封装器 我想找到一个好的面向对象C++,而不是SQLite的C包装器。人们推荐什么?如果你有几点建议,请把它们放在单独的答复中进行表决。另外,请指出您是否有任何关于您所建议的包装的经验以及如何使用它。 < P>我已经使用了这个,但是我已经移到C++了,所以现在可能有更新的/更好的了。它不是很OO,但是更现代的C++。_C++_Database_Sqlite - Fatal编程技术网

SQLite的一个好的OO C++封装器 我想找到一个好的面向对象C++,而不是SQLite的C包装器。人们推荐什么?如果你有几点建议,请把它们放在单独的答复中进行表决。另外,请指出您是否有任何关于您所建议的包装的经验以及如何使用它。 < P>我已经使用了这个,但是我已经移到C++了,所以现在可能有更新的/更好的了。它不是很OO,但是更现代的C++。

SQLite的一个好的OO C++封装器 我想找到一个好的面向对象C++,而不是SQLite的C包装器。人们推荐什么?如果你有几点建议,请把它们放在单独的答复中进行表决。另外,请指出您是否有任何关于您所建议的包装的经验以及如何使用它。 < P>我已经使用了这个,但是我已经移到C++了,所以现在可能有更新的/更好的了。它不是很OO,但是更现代的C++。,c++,database,sqlite,C++,Database,Sqlite,它支持Oracle、PostgreSQL和MySQL。A.太棒了,移植起来非常容易,我让它在半小时左右的时间内就可以在bcb5 omg上工作。它大概是你能得到的最薄的,也很容易理解。这里有很多例子,涵盖了你需要知道的每一件事。它使用异常进行错误处理——我修改了它以在几分钟内提供返回代码。唯一棘手的问题是创建自己的lib文件,没有提供任何文件 try { CppSQLite3DB db; db.open(asFileName.c_str()); db.execDML(

它支持Oracle、PostgreSQL和MySQL。A.

太棒了,移植起来非常容易,我让它在半小时左右的时间内就可以在bcb5 omg上工作。它大概是你能得到的最薄的,也很容易理解。这里有很多例子,涵盖了你需要知道的每一件事。它使用异常进行错误处理——我修改了它以在几分钟内提供返回代码。唯一棘手的问题是创建自己的lib文件,没有提供任何文件

try
{

    CppSQLite3DB db;

    db.open(asFileName.c_str());

    db.execDML("Update data set hrx = 0");

} // try

catch (...)
{

} // catch

再简单不过了….

也许你可以看看


使用Qt-它对SQLite有很好的绑定,非常适合它的总体设计

我对任何我能找到的都不满意,所以我写了自己的:

下面是一个代码示例:

sqlite::connection db( filename );

sqlite::command c( db, "UPDATE foo SET bar = ? WHERE name = ?" );
c << 123 << name << sqlite::exec;

sqlite::query q( db, "SELECT foo FROM bar" );
for( sqlite::query::iterator i = q.begin(); i != q.end(); i++ )
    std::cout << i->column< std::string >( 0 ) << "\n";

这真的是在招徕落选,但接下来


<>我直接使用C++的SQLite,没有添加C++抽象层的任何值。这是一个非常好而且高效的工具。

这里有一个工具已经有一段时间没有更新了,但是编译并运行在Mac OS GCC 4.3上。它也是根据麻省理工学院的许可证发布的,所以你可以在商业项目中使用它,没有问题

使用方法非常简单且非常干净:

sqlite3pp::database db("test.db");
sqlite3pp::transaction xct(db);
{
    sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)");
    cmd.bind(":user", "Mike");
    cmd.bind(":phone", "555-1234");
    cmd.execute();
}
xct.rollback();

看:

我也对我能找到的东西不满意。现在你可以写:

class Person {
public:
    Person() {}
    static SqlTable<Person>& table() {
        static SqlTable<Person> tab = SqlTable<Person>::sqlTable("Person",
            SqlColumn<Person>("Firstname",  makeAttr(&Person::firstname)),
            SqlColumn<Person>("Lastname",   makeAttr(&Person::lastname)),
            SqlColumn<Person>("Age",        makeAttr(&Person::age)),
        return tab;
    }
    std::string firstname;
    std::string lastname;
    int age;
};

SqliteDB db("testtable.db");
auto sel(db.select<Person>("Firstname=\"Danny\" and Lastname=\"Zeckzer\""));
std::for_each(sel.first, sel.second, [](const Person& p) {
...
Person me;
db.insert<Person>(me);
...
std::vector<Person> everybody;
db.insert<Person>(everybody.begin(), everybody.end());
只要坚持使用sqlite3数据类型,就只需要编写table方法。由于一切都是一个模板,在-O之后没有多少抽象层代码保留。自然连接需要一个类似于Person类的结果类。实现是一个少于500行的单头。许可证是LGPL

另一个简单的是。免责声明:我是作者。基本用法,老实说,你不会从这本书中得到比基本用法更多的东西,如下所示:

#include "NLDatabase.h"


using namespace std;
using namespace NL::DB;


int main(int argc, const char * argv[]) {

    Database db( "test.sqlite" );

    auto results = db.query("SELECT * FROM test WHERE name <> ?").select("TOM");

    for ( auto const & row : results ) {
        cout << "column[0]=" << row.column_string( 0 ) << endl;
    }
}
为了好玩,打开一个数据库,运行一个查询,然后在一行中获取结果:

for ( auto & row : Database( "test.sqlite" ).query( "SELECT * FROM test").select() ) {
    cout << row.column_string( 0 ) << endl;
}

我读了这篇文章,尝试了答案中提到的一些图书馆, 但是这些对我来说都不够简单,我是一个懒惰的程序员

所以我写了我自己的包装:


玩得开心

我做了一个是因为我们公司的需要。 它是C++11,并且只有标题。只需将标题放在项目中,包括它并链接到C sqlite库


git回购协议中也应该有一些例子,非常容易使用。

每个人都对使用什么给出了很好的建议:我会告诉你什么工具不可用

我的经历很糟糕。 我只是在研究orm的用途,我正在测试很多

弱点:

没有文件 没有解释性自述 不解释先决条件 不要编译,因为很多错误都不正确,在v0.3.17中没有修复
它不再可以下载了吗?是的,可以下载。目前还没有合适的版本。您可以从bazaar存储库中获取源代码,或者如果您没有bazaar RCS工具,您需要从中下载它们,或者您可以在线查看源代码。您在两次否决票中仅获得-4票,而我对您投了赞成票。使用C接口当然是一种选择,而且很可能是我们选择的。当然,我们可以使用一些轻C++封装,可能是Boo::SyrdypTR,带有自定义的删除器,可能会处理错误,但不需要一个巨大的API。@ CaskOy:是的-谢谢-我做了同样的事情。同样,这也是我们最明智的选择。
database db("dbfile.db");
// executes the query and creates a 'user' table if not exists
db << "create table if not exists user ("
      "   age int,"
      "   name text,"
      "   weight real"
      ");";
// inserts a new user and binds the values to '?' marks
db << "insert into user (age,name,weight) values (?,?,?);"
        << 20
        << "bob"
        << 83.0;
// slects from table user on a condition ( age > 18 ) and executes 
// the lambda for every row returned .
db << "select age,name,weight from user where age > ? ;"
   << 18
   >> [&](int age, string name, double weight) {
       cout << age << ' ' << name << ' ' << weight << endl;
   };
// selects the count(*) of table user
int count = 0;
db << "select count(*) from user" >> count;