SQlite3数据库使用异常

时间:2011-03-15 08:51:14

标签: c++ sql sqlite

我正在使用包装器SQLITE3来访问sqlite3数据库,每件事情都很好,我关闭了我已经打开的所有数据库,但是当我的应用程序完成执行时,执行时返回(返回0;)编程以下异常上升:

  

0x75d9b727处的未处理异常   SQLCONVERTOR.exe:Microsoft C ++   异常:CppSQLite3异常   内存位置0x0026f8d0 ..

在以下代码中:

void __cdecl exit (
        int code
        )
{
        doexit(code, 0, 0); /* full term, kill process */
}

我是一名c ++程序员,我花了大约一个月的时间来解决这个问题,但一无所获。

如果有人知道我必须做什么?我怎么想?我很感激他/这里的帮助。

2 个答案:

答案 0 :(得分:0)

sqlite3在C中,因此不会抛出异常。

您实际获得的是访问冲突,Microsoft正在变成例外。

问题是我们无法看到您的任何代码。

答案 1 :(得分:0)

问题是我使用来自C接口的一些API和来自CPPSqlite3 Wrapper的一些函数混合使用,基本上,使用sqlite3_close API与包装器中的close函数不同,包装器将DB指针设置为null,而sqlite3_close不要这样做,因此你必须手动完成。

换句话说: sqlite3_close(C)的C参数必须是NULL指针或从sqlite3_open(),sqlite3_open16()或sqlite3_open_v2()获得的sqlite3对象指针,而不是先前关闭的。使用NULL指针参数调用sqlite3_close()是一种无害的无操作。

我的错误是:

    while( (pStmt = sqlite3_next_stmt(NewDB.mpDB, 0))!=0 )
            {
                sqlite3_finalize(pStmt);
            }
sqlite3_close (NewDB.mpDB);

虽然它应该是:

while( (pStmt = sqlite3_next_stmt(NewDB.mpDB, 0))!=0 )
                {
                    sqlite3_finalize(pStmt);
                }
   NewDB.close();