Создание объектов из извлеченной строки из базы данных Sqlite

#c #sqlite #c 11

#c #sqlite #c 11

Вопрос:

Это программа на C 11, которая подключается к базе данных Sqlite с использованием библиотеки SqliteModernCpp. Существует следующий класс, который представляет запись из этой базы данных (по крайней мере, файл заголовка):

 #ifndef MOVIE_H
#define MOVIE_H

#include<string>

class movie
{
    public:
        movie(int id, std::string title, int year, int length);
        int get_id() const;
        void set_id(int id);
        std::string get_title() const;
        void set_title(std::string title);
        int get_year() const;
        void set_year(int year);
        int get_length() const;
        void set_length(int length);

    private:
        int id;
        std::string title;
        int year;
        int length;
};

#endif // MOVIE_H
  

В основной функции программы запрашивается база данных для извлечения записи с помощью поля «id». Обратите внимание, что это поле в базе данных имеет значения PK, NN и AI, поэтому этим запросом будет извлечена только одна запись. В настоящее время он просто выводит данные на консоль, используя лямбда-выражение. Как вернуть объект типа movie с помощью этого запроса?

 int main()
{
    // connect to the database
    sqlite::database db("database.db");

    // retrieve a record by ID
    auto id = 1;
    db << "SELECT * FROM movies WHERE rowid = "   std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length)
    {
        std::cout << title;
    };

    return 0;
}
  

Ответ №1:

Это кажется слишком простым, поскольку вы уже решили сложную часть (непроверенный код)

 auto id = 1;
movie idmovie
db << "SELECT * FROM movies WHERE rowid = "   std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length)
{
    idMovie = { rowid, title, year, length };
};
  

Возможно, вы сможете сократить это до

 auto id = 1;
movie idmovie = db << "SELECT * FROM movies WHERE rowid = "   std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length) -> movie
{
    return  { rowid, title, year, length };
};
  

Но я не проверял ошибку в нем 🙂