sqlite3_get_table 的替代方案

3

我有一个名为isadded()的函数,它导致了我的程序崩溃。我运行了debugdiag并发现了这个问题。

Function     Arg 1     Arg 2     Arg 3   Source 
ntdll!RtlpWaitOnCriticalSection+df     00001484     00000002     00000000    
ntdll!RtlEnterCriticalSection+a8     09e10c08     006310a5     09e10c08    
sqlite3!sqlite3_mutex_leave+17b     09caf370     0c81d9c8     0063d240    
sqlite3!sqlite3_get_table+99     09caf370     0c81d9c8     0c81d9bc    
OServHandler!COServHandler::isAdded+17f     059a6fd8     0c8272e0     00000006    
OServHandler!COServHandler::getHierarchy+ba7     0c940020     00008000     6009fb27    
AdminConsoleInterface!CAdminConsoleInterface::handleConnection+178     00001254     00000000     00000000    
AdminConsoleInterface!CAdminConsoleInterface::setOServHandler+33     008c5cd0     0250e9c8     00000000    

因此,出现错误的行是sqlite3_get_table()。
sprintf_s(query,1024,"SELECT * FROM OServs WHERE oservname = '%s' ;", cOServID);
cout<<query<<endl;
rc = sqlite3_get_table(db, query, &results, &nrow, &ncol, &zErrMsg);

我想确定特定变量是否已经添加到数据库中。由于这个函数似乎会崩溃,所以有没有其他的替代方案呢?我记得读过这个函数已经被弃用了,但不知道有什么替代方法。

1个回答

3
您可以使用一些命令来替换sqlite3_get_table。这里是讲解该过程的基本C/C++入门教程(链接已附),需要付出更多的努力,但您会获得更多的控制权。
每一个命令在sqlite3 reference的函数部分都有很好的文档记录。
更新:
作为一种替代方案,您可以使用sqlite3_exec,它相对简单。这里是我找到的一个小代码示例:(链接已附)

有没有更简单的方法来查看数据库中是否存在记录?将这些记录保存在平面文件中而不是数据库中是否有意义?这只是一个两列表,我想查看记录是否存在。 - roymustang86
为什么很难找到一个不错的代码例子来展示如何运行查询并访问结果呢?这真让人恼火。网站上只是说“对于查询,通过在两次调用sqlite3_step()之间调用sqlite3_column()来提取结果。” - roymustang86
1
@roymustang86 我添加了另一个带有示例的链接。有时候搜索你不太了解的东西是很困难的。我是通过输入“c++ sqlite3_exec example”来找到第一页上的内容的。 - Tom Kerr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接