Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ SQLite数据库文件在插入/删除期间被锁定 我使用的是C++ shell扩展DLL,用于读取、写入SQLite数据库表中的数据。还有另一个用于访问所有表的应用程序(exe)_Visual C++_Sqlite - Fatal编程技术网

Visual c++ SQLite数据库文件在插入/删除期间被锁定 我使用的是C++ shell扩展DLL,用于读取、写入SQLite数据库表中的数据。还有另一个用于访问所有表的应用程序(exe)

Visual c++ SQLite数据库文件在插入/删除期间被锁定 我使用的是C++ shell扩展DLL,用于读取、写入SQLite数据库表中的数据。还有另一个用于访问所有表的应用程序(exe),visual-c++,sqlite,Visual C++,Sqlite,有时,当我尝试删除/插入/更新SQLite数据库表时,我的dll显示异常“数据库文件已锁定”。这是因为另一个应用程序此时正在访问表 有没有办法从我的DLL解决这个问题?我可以使用链接中提到的解决方案吗?“http://stackoverflow.com/questions/6455290/implementing-sqlite3-busy-timeout-in-an-ios-app" 在当前代码中,我使用CppSQLite3.cpp方法execQuery(const char*szSQL)执行S

有时,当我尝试删除/插入/更新SQLite数据库表时,我的dll显示异常“数据库文件已锁定”。这是因为另一个应用程序此时正在访问表

有没有办法从我的DLL解决这个问题?我可以使用链接中提到的解决方案吗?“http://stackoverflow.com/questions/6455290/implementing-sqlite3-busy-timeout-in-an-ios-app"

在当前代码中,我使用CppSQLite3.cpp方法execQuery(const char*szSQL)执行SQL查询


请注意。

SQLite对多用户和多事务有一些限制。这意味着您无法读取/写入来自不同事务的资源。更新数据库时,数据库将被锁定

以下是一些可能对您有所帮助的链接




祝您好运

首先,您应该知道SQLite执行数据库级锁定。当您启动一个事务,而另一个应用程序尝试向同一个数据库写入内容时,您会得到
数据库被锁定
,并且SQLite会在
sqlite3\u busy\u超时
间隔后自动尝试执行相同的查询

因此,诀窍是确保您的交易尽可能短,即
1.执行开始事务
2.更新/删除/插入
3.提交

在这三个步骤之间没有任何其他内容。 此外,还可以根据事务的大小增加
sqlite3\u busy\u timeout
时间间隔,以适应应用程序


您可以尝试
WAL
模式,在该模式下可以同时读取和写入SQLite。但它也有自己的缺点。您可以参考SQLite

Thanks@DJK. 谢谢你,天哪。我们的exe和DLL应用程序正在访问相同的数据库表。Exe访问表1、表2和表3。DLL正在访问表1和表2。问题是Exe-表3插入需要更长的时间。这将导致数据库文件被锁定的情况。我认为解决办法是将表3移动到另一个数据库。我认为这将解决我们的问题issue@JChan:不客气!当然,您可以将表移动到另一个数据库,或者增加适合您的应用程序的繁忙时间!