Wt 数据库 Wt::Dbo

zengkefu 阅读:161 2025-02-15 21:57:57 评论:0

我正在尝试为一个项目学习 Wt,现在我正在尝试学习其中的数据库部分。

我卡在了开头。我正在尝试从 dbo 教程(网站 http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html#_installing_tt_wt_dbo_tt 中有一个教程)学习它,它位于 Wt 包 (tutorial1.C) 中的示例中

我在 ubuntu 中使用 Qt 编译器 (5.)。我已经按照网站教程(上面链接)中的说明构建了 Wt::Dbo 库。问题是它仍然给出一个错误;

cannot find lGL
collect2: ld returned 1 exit status

这里是Wt自带的代码(直接从tutorial1.C复制而来)

/* 
 * Copyright (C) 2010 Emweb bvba, Kessel-Lo, Belgium. 
 * 
 * See the LICENSE file for terms of use. 
 */ 
 
/***** 
 * This file is part of the Wt::Dbo tutorial: 
 * http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html 
 *****/ 
 
#include <Wt/Dbo/Dbo> 
#include <Wt/Dbo/backend/Sqlite3> 
#include <string> 
 
namespace dbo = Wt::Dbo; 
 
/***** 
 * Dbo tutorial section 2. Mapping a single class 
 *****/ 
 
class User { 
public: 
  enum Role { 
    Visitor = 0, 
    Admin = 1, 
    Alien = 42 
  }; 
 
  std::string name; 
  std::string password; 
  Role        role; 
  int         karma; 
 
  template<class Action> 
  void persist(Action& a) 
  { 
    dbo::field(a, name,     "name"); 
    dbo::field(a, password, "password"); 
    dbo::field(a, role,     "role"); 
    dbo::field(a, karma,    "karma"); 
  } 
}; 
 
void run() 
{ 
  /***** 
   * Dbo tutorial section 3. A first session 
   *****/ 
 
  /* 
   * Setup a session, would typically be done once at application startup. 
   * 
   * For testing, we'll be using Sqlite3's special :memory: database. You 
   * can replace this with an actual filename for actual persistence. 
   */ 
  dbo::backend::Sqlite3 sqlite3(":memory:"); 
  sqlite3.setProperty("show-queries", "true"); 
  dbo::Session session; 
  session.setConnection(sqlite3); 
 
  session.mapClass<User>("user"); 
 
  /* 
   * Try to create the schema (will fail if already exists). 
   */ 
  session.createTables(); 
 
  { 
    dbo::Transaction transaction(session); 
 
    User *user = new User(); 
    user->name = "Joe"; 
    user->password = "Secret"; 
    user->role = User::Visitor; 
    user->karma = 13; 
 
    dbo::ptr<User> userPtr = session.add(user); 
  } 
 
  /***** 
   * Dbo tutorial section 4. Querying objects 
   *****/ 
 
  { 
    dbo::Transaction transaction(session); 
 
    dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); 
 
    std::cerr << "Joe has karma: " << joe->karma << std::endl; 
 
    dbo::ptr<User> joe2 = session.query< dbo::ptr<User> > 
      ("select u from user u").where("name = ?").bind("Joe"); 
  } 
 
  { 
    dbo::Transaction transaction(session); 
 
    typedef dbo::collection< dbo::ptr<User> > Users; 
 
    Users users = session.find<User>(); 
 
    std::cerr << "We have " << users.size() << " users:" << std::endl; 
 
    for (Users::const_iterator i = users.begin(); i != users.end(); ++i) 
      std::cerr << " user " << (*i)->name 
        << " with karma of " << (*i)->karma << std::endl; 
  } 
 
  /***** 
   * Dbo tutorial section 5. Updating objects 
   *****/ 
 
  { 
    dbo::Transaction transaction(session); 
 
    dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); 
 
    joe.modify()->karma++; 
    joe.modify()->password = "public"; 
  } 
 
  { 
    dbo::Transaction transaction(session); 
    dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); 
    if (joe) 
      joe.remove(); 
  } 
 
  { 
    dbo::Transaction transaction(session); 
 
    dbo::ptr<User> silly = session.add(new User()); 
    silly.modify()->name = "Silly"; 
    silly.remove(); 
  } 
 
} 
 
int main(int argc, char **argv) 
{ 
  run(); 
} 

提前致谢

请您参考如下方法:

问题似乎是由 .pro 文件引起的。我不确定它是如何工作的,但是当我第一次实现它时替换 pro 文件时问题就消失了(从另一个 .pro 文件复制粘贴,修改很少,第一个和最后一个之间应该没有任何区别一)。


标签:数据库
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号