WINAPI SQLite C无法正确地将数据插入数据库
WINAPI SQLite C unable to insert data to DB properly
程序编译和运行正常,但在写入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
每个在各自的列处。需要帮助。
从代码的剩余部分来看,您似乎正在保存UNICODE字符串。我看不出arg1, 2, 3, 4
的类型,但你可能想尝试更换
sqlite3_bind_text(/* ... */);
带有
sqlite3_bind_text16(/* ... */);
您可能还需要检查all是否与数据库中的默认编码兼容。正如文件中所说:
如果调用sqlite3_open()或sqlite3_open_v2(),则数据库的默认编码将为UTF-8;如果使用sqlite3_open16(),将按本机字节顺序使用UTF-16。
你也可以使用一些PRAGMA语句:
PRAGMA编码
PRAGMA编码="UTF-8"
PRAGMA编码="UTF-16"
PRAGMA编码="UTF-16le"
PRAGMA编码="UTF-16be"在第一种形式中,如果主数据库已经创建,那么此杂注返回主数据库使用的文本编码"UTF-8"、"UTF-16le"(小端UTF-16编码)或"UTF-16be"(big-endian UTF-16编码)。如果主数据库尚未则返回的值是将用于创建主数据库(如果它是由该会话创建的)。
此杂注的第二到第五种形式设置了如果主数据库是由一场字符串"UTF-16"被解释为"使用本机字节排序"。无法更改文本数据库创建后的编码以及任何尝试因此将被默默地忽略。
一旦为数据库设置了编码,就无法对其进行更改。
相关文章:
- 逐行读取文件,并将数据插入变量和数组中
- Qt & SqlLite 将数据插入数据库
- C++ - 将数据插入到地图循环的地图中
- SQLite C/C++ 接口:将数据插入表时内存增加
- C++将 X 向量数据插入到另一个向量
- 如何通过 C 变量将数据插入表中
- 将数据插入一些复杂的数据结构-C
- 将数据插入C 中的文本文件中
- 如何通过c++中的应用程序将数据插入solr
- 在Windows上将数据插入文件
- C++链表——如何将每个新数据插入尾部
- C++链表实现多数据插入
- 在c++中,将数据插入到文件中的特定位置而不进行覆盖
- C++内存从将数据插入链表中泄漏
- 将数据插入多维向量并进行排序
- WINAPI SQLite C无法正确地将数据插入数据库
- 参照同一矢量的数据插入矢量
- PostgreSQL字节二进制数据插入
- Cuda有效地将数据插入到未排序的填充数组中
- 使用 ADO 将原始文件数据插入访问表的 BLOB("OLE 对象")字段