首页 > 解决方案 > 使用 sqlite3 记录 C++ 程序失败:空字符串或空值

问题描述

我使用 sqlite3 数据库将模拟数据(字符串)存储在管道中。我将参数值与模拟结果一起记录:

    auto insert_params_results_and_get_rowid(bpo::variables_map vm, std::string const& results)
    {
        sqlite3pp::command cmd(
        this->m_database,
        "INSERT INTO table (x, y, z, results) VALUES (?,?,?,?)"
        );
        cmd.binder() << vm["x"].as<double>()
                     << vm["y"].as<double>()
                     << vm["z"].as<int>()
                     << results;
        cmd.execute();
        return this->m_database.last_insert_rowid();
    }

但有时模拟会因为随机效应和参数条件而失败。在那种情况下,我想记录失败。由于程序无法生成字符串,所以我记录了一个空字符串:

  auto insert_params_failure_and_get_rowid(bpo::variables_map vm)
  {
        sqlite3pp::command cmd(
        this->m_database,
        "INSERT INTO table (x, y, z, results) VALUES (?,?,?,?)"
        );
        cmd.binder() << vm["x"].as<double>()
                     << vm["y"].as<double>()
                     << vm["z"].as<int>()
                     << "";
        cmd.execute();
        return this->m_database.last_insert_rowid();
  }

但就逻辑而言,我认为存储 NULL 而不是空字符串更有意义。这个逻辑是否正确,使用 C++ 存储 NULL 值的语法是什么?

我使用sqlite3pp 库

标签: c++sqlite

解决方案


推荐阅读