程序可以正常编译和运行,但在写入DB时出现问题。我不知道为什么会出现以下代码:
sqlite3_stmt *insertStmt;
char *_sql = "INSERT INTO BOOKS(ID,BOOKNAME,ISSUER,RETURNED) VALUES(@id,@bname,@iss,@ret);";
if(sqlite3_prepare(_db, _sql, 300, &insertStmt, NULL) == SQLITE_OK)
MessageBox(*hw,L"Prepared!",L"Info",MB_OK);
else
MessageBox(*hw,(LPWSTR)CharToWChar(sqlite3_errmsg(_db)),L"INFO",MB_OK);
int paramidx1 = sqlite3_bind_parameter_index(insertStmt, "@idx");
int paramidx2 = sqlite3_bind_parameter_index(insertStmt, "@bname");
int paramidx3 = sqlite3_bind_parameter_index(insertStmt, "@iss");
int paramidx4 = sqlite3_bind_parameter_index(insertStmt, "@return");
sqlite3_bind_text(insertStmt, paramidx1, arg1, -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insertStmt, paramidx2, arg2, -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insertStmt, paramidx3, arg3, -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insertStmt, paramidx4, arg4, -1, SQLITE_TRANSIENT);
MessageBox(*hw,L"Stepping into insert statement",L"INFO",MB_OK);
if (sqlite3_step(insertStmt) == SQLITE_OK)
{
wcscpy(ermsg,CharToWChar("Error in inserting statement or in DB."));
MessageBox(*hw,(LPWSTR)CharToWChar(sqlite3_errmsg(_db)),L"INFO",MB_OK);
return 0;
}例如,当我输入12作为id,"XYZ“作为bname,"ABC”作为iss,34作为return..在数据库中是:
1 X A 3每一个在各自的列上。我需要帮助。
发布于 2013-12-06 15:55:38
从代码的其余部分看,您似乎是在保存UNICODE字符串。我看不到arg1, 2, 3, 4的类型,但您可能想尝试替换
sqlite3_bind_text(/* ... */);使用
sqlite3_bind_text16(/* ... */);您可能还需要检查all是否与数据库中的默认编码兼容。正如它所说的in the documentation
如果调用sqlite3_open()或sqlite3_open_v2(),则数据库的默认编码为
-8;如果使用sqlite3_open16(),则使用本机字节顺序的UTF-16。
你也可以使用一些PRAGMA statements:
PRAGMA编码;
UTF=“-8”;
UTF=“-16”;
UTF=“-16LE”;
UTF PRAGMA=“-16be”;
在第一种形式中,如果已经创建了主数据库,则此杂注返回主数据库使用的文本编码,"UTF-8“、"UTF-16le”(小端UTF-16编码)或"UTF-16be“(大端UTF-16编码)之一。如果尚未创建主数据库,则返回的值是用于创建主数据库的文本编码(如果主数据库是由该会话创建的)。
该杂注的第二到第五种形式设置了主数据库的编码,如果主数据库是由该会话创建的,则主数据库将使用该编码。字符串"UTF-16“被解释为”使用本机字节排序的UTF-16编码“。在创建数据库后,不能更改其文本编码,任何尝试这样做的尝试都将被忽略。
一旦为数据库设置了编码,就无法对其进行更改。
https://stackoverflow.com/questions/20416626
复制相似问题