我制作了自己的数据库格式,遗憾的是它需要太多的内存,而且它的大小变得非常可怕,而且维护起来也很糟糕。
因此,我正在寻找一种将对象中的结构数组存储到表中的方法。
我猜我需要使用 blob,但欢迎所有其他选项。实现 blob 的简单方法也会有所帮助。
我附上了我的保存代码和相关结构(从我之前可怕的帖子更新)
#include "stdafx.h"
#include <string>
#include <stdio.h>
#include <vector>
#include "sqlite3.h"
using namespace std;
struct PriceEntry{
    float cardPrice;
    string PriceDate;
    int Edition;
    int Rarity;
};
struct cardEntry{
    string cardName;
    long pesize;
    long gsize;
    vector<PriceEntry> cardPrices;
    float vThreshold;
    int fav;
};
vector<cardEntry> Cards;
void FillCards(){
  int i=0;
  int j=0;
  char z[32]={0};
  for(j=0;j<3;j++){
     cardEntry tmpStruct;
     sprintf(z, "Card Name: %d" , i);
     tmpStruct.cardName=z;
     tmpStruct.vThreshold=1.00;
     tmpStruct.gsize=0;
     tmpStruct.fav=1;
            for(i=0;i<3;i++){
                PriceEntry ss;
                ss.cardPrice=i+1;
                ss.Edition=i;
                ss.Rarity=i-1;
                sprintf(z,"This is struct %d", i);
                ss.PriceDate=z;
                tmpStruct.cardPrices.push_back(ss);
            }
            tmpStruct.pesize=tmpStruct.cardPrices.size();
            Cards.push_back(tmpStruct);
  }
}
int SaveCards(){
      // Create an int variable for storing the return code for each call
    int retval;
    int CardCounter=0;
    int PriceEntries=0;
    char tmpQuery[256]={0};
    int q_cnt = 5,q_size = 256;
    sqlite3_stmt *stmt;
    sqlite3 *handle;
    retval = sqlite3_open("sampledb.sqlite3",&handle);
    if(retval)
    {
        printf("Database connection failed\n");
        return -1;
    }
    printf("Connection successful\n");
    //char create_table[100] = "CREATE TABLE IF NOT EXISTS users (uname TEXT PRIMARY KEY,pass TEXT NOT NULL,activated INTEGER)";
    char create_table[] = "CREATE TABLE IF NOT EXISTS Cards (CardName TEXT, PriceNum NUMERIC, Threshold NUMERIC, Fav NUMERIC);";
    retval = sqlite3_exec(handle,create_table,0,0,0);
    printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(handle) );
    for(CardCounter=0;CardCounter<Cards.size();CardCounter++){
        char Query[512]={0};
        for(PriceEntries=0;PriceEntries<Cards[CardCounter].cardPrices.size();PriceEntries++){
              //Here is where I need to find out the process of storing the vector of PriceEntry for Cards then I can modify this loop to process the data
       }
            sprintf(Query,"INSERT INTO Cards VALUES('%s',  %d, %f, %d)",            
            Cards[CardCounter].cardName.c_str(),
            Cards[CardCounter].pesize,
            Cards[CardCounter].vThreshold,
            Cards[CardCounter].fav); //My insert command  
        retval = sqlite3_exec(handle,Query,0,0,0);
        if(retval){
            printf( "Could not prepare statement: %s\n", sqlite3_errmsg(handle) );
        }
    }
    // Insert first row and second row
    sqlite3_close(handle);
    return 0;
}
我尝试谷歌搜索,但我的结果还不够。