由sqlite3_column_text返回的SQLite奇异值
SQLite strange value returned by sqlite3_column_text
我有一个安装了sqlite的c++项目。
当应用程序启动时,它将使用以下代码创建数据库: // Open connection with database
if (SQLITE_OK != sqlite3_open_v2("Test.db", &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, nullptr)) {
return false;
}
// Delete old tables if exists
char * error;
if (SQLITE_OK != sqlite3_exec(db, "DROP TABLE IF EXISTS Tests;", nullptr, nullptr, &error)) {
return false;
}
// Recreate all tables
if (SQLITE_OK != sqlite3_exec(db, "CREATE TABLE Tests(testID INTEGER PRIMARY KEY ASC, name TEXT NOT NULL);", nullptr, nullptr, &error)) {
return false;
}
// Test only
if (SQLITE_OK != sqlite3_exec(db, "INSERT INTO Tests(testID, name VALUES (1, 'Andrea');", nullptr, nullptr, &error)) {
return false;
}
当我执行这段代码时:
sqlite3_stmt *query = nullptr;
if (SQLITE_OK != sqlite3_prepare_v2(db, "SELECT testID, name FROM Tests;", -1, &query, nullptr)) {
}
unsigned char const * t = nullptr;
if (SQLITE_ROW == sqlite3_step(query)) {
t = sqlite3_column_text(query, 1);
sqlite3_finalize(query);
}
printf( (char*)t );
我期待"Andrea",但这段代码打印:——PYoea——ð¶oea——ð§oea
每次结果不同
根据sqlite3_column_text
文档,指针t
在sqlite3_finalize
之后失效:
换句话说,您应该首先调用sqlite3_column_text()、sqlite3_column_blob()或sqlite3_column_text16()来强制结果为所需的格式,然后调用sqlite3_column_bytes()或sqlite3_column_bytes16()来查找结果的大小。
返回的指针在发生如上所述的类型转换之前,或者在调用sqlite3_step()或sqlite3_reset()或sqlite3_finalize()之前都是有效的。
根据@tkausl的建议,要解决这个问题,您应该打印数据或将其复制到sqlite3_finalize
调用之前的某个地方以供进一步使用。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- 查询SQLite数据库中的日期
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 如何知道 sqlite 中的函数"回调"是否返回了一些东西?
- SQLite 错误代码:sqlite_step() 返回 5 (SQLITE_BUSY)
- C sqlite返回一些值
- SQLite CREATE TABLE 和 INSERT 工作,但返回SQLITE_ERROR "no such table" C++
- 在 c++ 中使用 sqlite 的 void 函数中的"返回"问题
- 返回"unknown error"的 SQLite 查询
- 在C++的SQLite API中返回SQLite_exec()的内容
- 如何在返回SQLite中零项的SELECT操作中获取列名
- QT SQLite select不返回任何数据
- 由sqlite3_column_text返回的SQLite奇异值
- SQLite INSERT 命令返回错误"column number is not unique"