首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WINAPI SQLite C无法将数据正确插入数据库

WINAPI SQLite C无法将数据正确插入数据库
EN

Stack Overflow用户
提问于 2013-12-06 13:25:27
回答 1查看 193关注 0票数 0

程序可以正常编译和运行,但在写入DB时出现问题。我不知道为什么会出现以下代码:

代码语言:javascript
复制
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..在数据库中是:

代码语言:javascript
复制
1    X    A    3

每一个在各自的列上。我需要帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 15:55:38

从代码的其余部分看,您似乎是在保存UNICODE字符串。我看不到arg1, 2, 3, 4的类型,但您可能想尝试替换

代码语言:javascript
复制
sqlite3_bind_text(/* ... */);

使用

代码语言:javascript
复制
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编码“。在创建数据库后,不能更改其文本编码,任何尝试这样做的尝试都将被忽略。

一旦为数据库设置了编码,就无法对其进行更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20416626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档