c++ - 使用 SQLite 覆盖数据
问题描述
我正在尝试使用 SQLite 访问本地数据库。该表如下所示:
FrameIndex FrameName Bus NoMinorFrames MinorFrameTime TotalTime
1 Bus_Frame_1 BUS-1 8 20 160
2 Bus_Frame_2 BUS-2 8 20 160
3 Bus_Frame_3 BUS-3 8 20 160
4 Bus_Frame_4 BUS-4 8 20 160
5 Bus_Frame_5 BUS-5 8 20 160
我正在尝试编写一个包装类,以便每个查询都返回所有记录的向量。为了做到这一点,我将我的类的引用作为参数传递给sqlite_exec()
这是我的包装类的头文件
class Database{
public:
Database(const char*);
int fnQueryExec(const char*);
void fnClose();
char* fnGetLastError();
vector<char*> Data;
//vector<vector<char*> > m_vectData;
vector<char*> m_vectData; //For testing purposes I am storing only second column.
int Count;
int m_nCount;
private:
sqlite3 *db;
bool fnFileExists(const char*);
bool m_bDatabaseStatus;
char *m_SQLError;
};
这是回调函数:
static int callback(void* object, int count, char **data, char **columns){
Database* db= static_cast<Database*>(object);
char* temp;
temp = data[1];
db->m_vectData.push_back(temp);
db->m_nCount = count;
return 0;
}
问题是当我打印出向量的内容时,这是输出:
Row 1: Bus_Frame_5
Row 2: Bus_Frame_5
Row 3: Bus_Frame_5
Row 4: Bus_Frame_5
Row 5: Bus_Frame_5
不知何故,将数据推入向量会改变向量的所有先前元素。我已经使用常规char**
数组而不是具有相同结果的向量对此进行了测试。即使单独传递向量的引用也会导致同样的问题。
vector<char*> *vect = static_cast<vector<char*>* >(object);
char* temp = data[1];
vect->push_back(temp);
for(int nIndex = 0; nIndex<vect->size(); nIndex++)
printf("Data %s ", (*vect)[nIndex]);
printf("\n");
数据总线_Frame_1
数据总线_帧_2 数据总线_帧_2
数据总线_帧_3 数据总线_帧_3 数据总线_帧_3
数据总线_帧_4 数据总线_帧_4 数据总线_帧_4 数据总线_帧_4
数据总线_帧_5 数据总线_帧_5 数据总线_帧_5 数据总线_帧_5 数据总线_帧_5
知道我做错了什么吗?
解决方案
您每次都将相同的指针值(或内存地址,如果您愿意)data[1] 复制到 m_vectData 中。因此,当您转储 m_vectData 时,它会显示该内存地址当前的数据五次。让这个工作的一种方法是让 m_vectData 成为 std::string 的向量。
推荐阅读
- batch-file - 处理一个 .bat 脚本,该脚本旨在获取 PC 名称并进行更改,但不确定如何。有什么建议吗?
- python - 在列表中更改列表中的顺序
- group-by - 在 ORDER BY 子句中无效'因为它不包含在聚合函数或 GROUP BY 子句中,但它在聚合函数中
- python-3.x - 新数据帧是旧数据帧中多列上 value_counts 的结果
- ios - 如何在 SwiftUI 中提供自定义 ButtonStyle 附加选项
- docker - 谷歌云或 Docker 无法识别文件夹
- excel - Excel 中的股票数据为同一股票提供了两种完全不同的结果。潜在的错误?
- asp.net - IIS Web.config 将一个子文件夹重定向到另一个
- python - TypeError:字符串索引必须是整数(在 lambda 函数中)
- c# - 如何以编程方式更新 Word 字段?