sqlite3第二次赢了

时间:2017-04-19 15:13:52

标签: c++ sqlite

我第一次尝试插入行时,我的Sqlite连接器工作得很好,但是在它关闭后再次运行程序时,它根本无法工作。

这是我的构造函数

  Sqldatabase::Sqldatabase() {
  open_connection("Database.db");

  sqlite3_stmt *statement;
  std::string sql = "SELECT id FROM articles ORDER BY id DESC LIMIT 1";
  char *query = &sql[0];
  if(sqlite3_prepare_v2(db, query, -1, &statement, 0) == SQLITE_OK && sqlite3_step(statement) == SQLITE_ROW) {
    article_counter = sqlite3_column_int(statement, 0) + 1;
  } else {
    article_counter = 1;
  }
}

这是我的preparedStatement方法。

bool Sqldatabase::prepareStatement(std::string sql) {
  char *query = &sql[0];
  sqlite3_stmt *statement;
  int result;

  if (sqlite3_prepare_v2(db, query, sql.size(), &statement, 0) == SQLITE_OK) {
    result = sqlite3_step(statement);
    std::cout << sql << '\n';
    sqlite3_finalize(statement);
    if(result == SQLITE_DONE) {
       return true;
     }
  }
  std::cout << "SQL failed: " << sql << '\n';
  return false;
}

最后,我在这里称之为方法。

bool Sqldatabase::create_ART(int ng_id, std::string title, std::string author, std::string text) {
  //Creating article
  std::ostringstream s;
  s << "INSERT INTO articles (id, title, author, content, created) " <<
       "VALUES (" << article_counter << ", '" << title << "', '" << author << "', '" << text << "' , CURRENT_DATE)";
  std::string sql(s.str());
  prepareStatement(sql);

  //Adding article to newsgroup
  std::ostringstream t;
  t << "INSERT INTO contains VALUES ( " << article_counter << " ,  " << ng_id << ")";
  std::string sql2(t.str());
  article_counter++;
  return prepareStatement(sql2);
}

我的测试脚本看起来像这样。我已经在数据库中有一个id为1的新闻组。

Sqldatabase db;

int main(int argc, char* argv[]){
    std::cout << "-----Test of Memdatabase, Newsgroup and Article classes-----" << std::endl;
    db = Sqldatabase();

    db.create_ART(1, "Happy day", "John", "Sunday afternoon is pretty chill");
    db.create_ART(1, "Chill day", "Peter", "Sunday afternoon is pretty chill");

}

1 个答案:

答案 0 :(得分:1)

啊,您正在尝试使用相同的ID创建新记录。 ID通常是唯一的。试试:

db.create_ART(2, "Chill day", "Peter", "Sunday afternoon is pretty chill");