2011-12-18 12 views
4

シンプル構造体(vector3)をsqlite3_bind_blobに保存しようとしましたが、これはどのように動作するのかわかりません。このコードをデバッグすると、コンソールウィンドウがクラッシュします。どうすればこの問題を解決できますか?どうすれば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

これがすべてのコードの場合は間違っています。結果にアクセスする前にDBを照会する必要があります。それがあなたのコードのすべてではない場合は、もう少し私たちを示す必要があるので、あなたが本当にやっていることを見ることができます。 –

+0

新しいコードを慎重に読んでください。あなたは正しい順序で物事をしていません。 –

+0

あなたは私にもう一度それを見てはいけないというヒントを教えてもらえますか – ErrorX

答えて

2

私はsqlite3_column_blob()は、クエリ操作の結果に使用されなければならないと考えています。挿入したばかりのデータのクエリを発行してみてください

+1

は私のコメントのようです。 – sehe

関連する問題