Winapi 带SQLite visual c的Windows.h++;错误
我两天前刚开始windows应用程序编程。。我正在使用VC++,它有一些我无法解决的问题。 当我向下面的函数发送正确的参数时,它会正确地显示所有内容,但不会将insert查询保存到DB 声明如下:Winapi 带SQLite visual c的Windows.h++;错误,winapi,visual-c++,sqlite,Winapi,Visual C++,Sqlite,我两天前刚开始windows应用程序编程。。我正在使用VC++,它有一些我无法解决的问题。 当我向下面的函数发送正确的参数时,它会正确地显示所有内容,但不会将insert查询保存到DB 声明如下: INSERT INTO BOOKS(ID,USERNAME,ISSUER,RETURNED) VALUES(1,'xyz','xyz',0); 下面是sqlite的表创建语句: sql = "CREATE TABLE IF NOT EXISTS BOOKS(" \ "ID INT PRI
INSERT INTO BOOKS(ID,USERNAME,ISSUER,RETURNED) VALUES(1,'xyz','xyz',0);
下面是sqlite的表创建语句:
sql = "CREATE TABLE IF NOT EXISTS BOOKS(" \
"ID INT PRIMARY KEY NOT NULL," \
"BOOKNAME TEXT NOT NULL," \
"ISSUER TEXT NOT NULL," \
"RETURNED INT);";
以下是函数:
using namespace std;
int WriteToDB(sqlite3 *,const char [],wchar_t *,HWND *);
int WriteToDB(sqlite3 *_db,const char _query[],wchar_t *ermsg,HWND *hw)
{
sqlite3_stmt *insertStmt;
MessageBox(*hw,L"Creating insert statement",L"INFO",MB_OK);
if(sqlite3_prepare(_db, _query, 400,&insertStmt, NULL))
MessageBox(*hw,L"Prepared!",L"Info",MB_OK);
MessageBox(*hw,L"Stepping into insert statement",L"INFO",MB_OK);
MessageBox(*hw,(LPWSTR)_query,L"Input",MB_OK);
if (sqlite3_step(insertStmt) != SQLITE_DONE)
{
wcscpy(ermsg,CharToWChar("Didn't Insert Item! Please check statement or DataBase!!"));
return 0;
}
sqlite3_finalize(insertStmt);
return 1;
}
编辑:这是我得到的新错误:
在SQLite中
near "I": Syntax Error
本声明:
INSERT INTO BOOKS(ID,BOOKNAME,ISSUER,RETURNED) VALUES(1,'xyz','xyz',0);
这里的错误是:
if(sqlite3_prepare(_db, _query, 400,&insertStmt, NULL)) //...
应该是:
if(sqlite3_prepare(_db, _query, 400,&insertStmt, NULL)==SQLITE_OK) //...
因为#define SQLITE_OK 0/*Successful result*/
,所以您之前的条件与假装的条件相反
建议:不要在SQL语句中合并数据,请考虑使用参数和接口。
编辑: 建议使用sqlite3\u prepare\u v2
而不是sqlite3\u prepare
。使用这种方法,您可以很容易地通过sqlite3\u errmsg
获得有关错误原因的信息:
if(sqlite3_prepare(_db, _query, 400,&insertStmt, NULL) == SQLITE_OK) {
MessageBox(*hw,L"Prepared!",L"Info",MB_OK);
} else {
MessageBox(*hw, sqlite3_errmsg16(_db), L"Error", MB_OK);
}
没有错误只是不保存。。。这是没有插入项弹出。发布
sql
定义和WriteToDB
调用。确定。。。这就是问题所在。。。我按照你说的做了,当我运行它时,“准备好的”并没有显示在屏幕上。。。我猜那里有点不对劲。。。需要帮助……嗯,你能给我详细解释一下吗?我太迷茫了:/这会迫使你重新设计你的函数,但使用插入到书中(ID、用户名、发行人、返回的)值(?,,?)更安全代码>和在sqlite3\u步骤之前
使用sqlite3\u bind\u int(insertStmt,1,1);sqlite3_bind_text(insertStmt,2,“xyz”,-1,SQLITE_STATIC)代码>但我需要这样的陈述:/OK,这只是一个建议!继续寻找真正的问题!