// SQL数据类型
enum class SQLDataType { NULLVALUE, INTEGER, REAL, TEXT, BLOB };
// 查询结果结构体
struct QueryResult {
std::vector<SQLDataType> columnTypes; // 列类型列表
std::vector<std::vector<std::any>> rows; // 每一行的值
};
for (const auto& row : result.rows) {
for (size_t i = 0; i < row.size(); ++i) {
if (result.columnTypes[i] == "INTEGER") {
int val = std::any_cast<int>(row[i]);
std::cout << "INT: " << val << std::endl;
} else if (result.columnTypes[i] == "TEXT") {
std::string val = std::any_cast<std::string>(row[i]);
std::cout << "TEXT: " << val << std::endl;
} else if (result.columnTypes[i] == "REAL") {
double val = std::any_cast<double>(row[i]);
std::cout << "REAL: " << val << std::endl;
} else if (result.columnTypes[i] == "BLOB") {
auto blob = std::any_cast<std::vector<uint8_t>>(row[i]);
std::cout << "BLOB size: " << blob.size() << std::endl;
}
}
}
getText()
和getString()
的区别
-
getText()
返回 const char*
(C 风格字符串)
如果数据库字段是 NULL,则返回 nullptr
适用于临时访问,不能长期存储(因为 SQLite 内部可能会重用缓冲区)
-getString()
返回 std::string(C++ 字符串对象)
如果数据库字段是 NULL,返回空字符串 ""
适用于持久存储,因为std::string
会复制数据
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。