同时访问Sqlite数据库

时间:2018-10-04 02:52:59

标签: sqlite

我正在使用Visual C ++编写一个小型应用程序,该应用程序将调用SQLite C接口来创建数据库并将一些数据插入其中。

在调试应用程序时,我要检查数据库中的数据。因此,我从命令行启动sqlite3 shell(sqlite3.exe),然后使用以下命令打开数据库:

.open文件名

此后,我要检查由我的应用程序创建的表,但始终会收到“表不存在”错误。

然后我使用“ select * from sqlite_master;”,但仍返回空结果。

我将进行以下更多测试:

  1. 尝试使用--readonly选项再次打开数据库,如下所示:

.open --readonly FileName;

  1. 打开数据库后,我尝试使用如下命令:

从sqlite_master中选择*;

然后我将看到“数据库已锁定”错误。我尝试在Stackoverflow上搜索解决方案,所有解决方案仅建议关闭正在访问数据库的其他应用程序。但是,我需要让应用程序仍然访问数据库,同时我仍然可以查看(而不修改)sqlite数据库中的内容,这可能吗?

因此,我只是想知道是否可以通过sqlite3.exe shell访问由另一个程序同时打开的sqlite数据库? 目前只有我的应用程序将写入数据库,而sqlite3 shell仅需要读取数据库中的数据。

2 个答案:

答案 0 :(得分:0)

您好,您可以使用“ SQlite数据库浏览器”。使用此工具,您可以轻松创建sqlite数据库并插入行。您也可以查看插入的数据。

答案 1 :(得分:0)

如果sqlite_master为空,则可能是您使用CLI工具打开了错误的文件,或者编写的应用程序可能未提交创建您要查找的表的事务。

如果您需要一个编写者和一个读者进程,那么最好检查https://www.sqlite.org/wal.html并确保在两个进程中都正确打开了数据库。

如果这仅用于调试,则也许使用https://www.sqlite.org/backup.html Backup API也是一种解决方案。这样一来,您就可以将数据库转储到一个单独的文件中,从而可以在读取时忽略并发问题。