2011-12-18 63 views
4

我嘗試保存sqlite3_bind_blob中的simpel結構(vector3),但我不知道這是如何工作的。如果我調試此代碼,控制檯窗口崩潰。我該如何解決這個問題?我怎樣才能保存在SQLITE C++結構

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; 
} 
+0

如果這就是您的所有代碼,那就錯了。在訪問結果之前,您需要查詢數據庫。如果這不是你的全部代碼,那麼你需要向我們展示更多,所以我們可以看到你真的在做什麼。 – 2011-12-18 21:50:20

+0

請仔細閱讀您的新代碼。你沒有按照正確的順序做事。 – 2011-12-18 22:04:41

+0

你可以給我一個提示,我不再看到它 – ErrorX 2011-12-18 22:30:49

回答

2

我認爲sqlite3_column_blob()必須用於查詢操作的結果。嘗試針對剛剛插入的數據發出查詢

+1

看起來像是對我的評論。 – sehe 2011-12-18 21:43:54