如何在SQLITE c++中保存结构体?

How can i save a struct in SQLITE C++

本文关键字:保存 结构体 c++ SQLITE      更新时间:2023-10-16

我尝试在sqlite3_bind_blob中保存一个简单的结构体(vector3),但我不知道这是如何工作的。如果我调试这段代码,控制台窗口将崩溃。我怎样才能解决这个问题?

struct vector3
{
    int X;
    int Y;
    int Z;
};
int main ()
{
    sqlite3 *db = NULL;
    sqlite3_stmt *res = NULL;   
    sqlite3_open_v2("SaveGame1.sav", &db, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, NULL);
    string query = "CREATE TABLE IF NOT EXISTS TestPlayer (vector BLOB)";
    sqlite3_prepare_v2 (db, query.c_str(), query.length(), &res, 0);
    sqlite3_step(res);
    // Try to add mij struct
    vector3 MyLocation;
    MyLocation.X = 100;
    MyLocation.Y = 100;
    MyLocation.Z = 100;
    query = "INSERT INTO TestPlayer (location) VALUES (?);";
    sqlite3_prepare_v2 (db, query.c_str(), query.length(), &res, 0);
    sqlite3_bind_blob (res, 1, &MyLocation, sizeof(vector3), SQLITE_TRANSIENT);
    sqlite3_step(res);
    query = "SELECT * FROM TestPlayer;";
    sqlite3_prepare_v2 (db, query.c_str(), query.length(), &res, 0);
    sqlite3_step(res);
    const vector3 *GetLoc = (const vector3 *) sqlite3_column_blob(res, 0);
    cout << GetLoc->X << endl;
    sqlite3_finalize(res);
    sqlite3_close(db);
    return 0;
}

我认为必须对查询操作的结果使用sqlite3_column_blob()。尝试为刚刚插入的数据发出查询