2011-12-18 3 views
4

Я пытаюсь сохранить simpel struct (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

Если это ваш код, это неправильно. Перед доступом к результату вам необходимо запросить базу данных. Если это не весь ваш код, вам нужно показать нам немного больше, чтобы мы могли видеть, что вы на самом деле делаете. –

+0

Внимательно прочитайте свой новый код. Вы не делаете что-то в правильном порядке. –

+0

Можете ли вы дать мне совет, я больше его не вижу – ErrorX

ответ

2

Я считаю, что sqlite3_column_blob() должны быть использованы по результатам операции запроса. Попробуйте выполнить запрос для данных, которые вы только что вставили.

+1

выглядит как комментарий для меня. – sehe