Pietro Asked: 2012-09-15 09:28:37 +0800 CST2012-09-15 09:28:37 +0800 CST 2012-09-15 09:28:37 +0800 CST 我可以使用 SQLite 在不同的应用程序之间共享数据吗? 772 我可以使用 SQLite 作为 2 个或更多应用程序连接的数据库吗? 即我可以用它在不同的应用程序之间共享数据吗? sqlite embedded 1 个回答 Voted Best Answer Philᵀᴹ 2012-09-15T09:33:15+08:002012-09-15T09:33:15+08:00 是的。 从常见问题解答: 多个应用程序或同一应用程序的多个实例可以同时访问单个数据库文件吗? 多个进程可以同时打开同一个数据库。多个进程可以同时执行 SELECT。但是,任何时候只有一个进程可以对数据库进行更改。 SQLite 使用读/写锁来控制对数据库的访问。(在不支持读取器/写入器锁的 Win95/98/ME 下,改为使用概率模拟。)但请注意:如果数据库文件保存在 NFS 文件系统上,此锁定机制可能无法正常工作。这是因为 fcntl() 文件锁定在许多 NFS 实现中被破坏。如果多个进程可能尝试同时访问该文件,则应避免将 SQLite 数据库文件放在 NFS 上。在 Windows 上,Microsoft 的文档说如果您没有运行 Share.exe 守护程序,锁定可能无法在 FAT 文件系统下工作。对 Windows 有很多经验的人告诉我,网络文件的文件锁定非常有问题,而且不可靠。如果他们说的是真的, 我们知道没有其他嵌入式 SQL 数据库引擎支持与 SQLite 一样多的并发性。SQLite 允许多个进程一次打开数据库文件,并允许多个进程一次读取数据库。当任何进程想要写入时,它必须在其更新期间锁定整个数据库文件。但这通常只需要几毫秒。其他流程只是等待作者完成,然后继续他们的业务。其他嵌入式 SQL 数据库引擎通常只允许单个进程一次连接到数据库。 但是,客户端/服务器数据库引擎(例如 PostgreSQL、MySQL 或 Oracle)通常支持更高级别的并发性,并允许多个进程同时写入同一个数据库。这在客户端/服务器数据库中是可能的,因为始终有一个受良好控制的服务器进程可用于协调访问。如果您的应用程序需要大量并发,那么您应该考虑使用客户端/服务器数据库。但经验表明,大多数应用程序需要的并发性远低于其设计者的想象。 当 SQLite 尝试访问被另一个进程锁定的文件时,默认行为是返回 SQLITE_BUSY。您可以使用 sqlite3_busy_handler() 或 sqlite3_busy_timeout() API 函数从 C 代码调整此行为。
是的。
从常见问题解答: