我正在使用Visual C ++编写一个小型应用程序,该应用程序将调用SQLite C接口来创建数据库并将一些数据插入其中。
在调试应用程序时,我要检查数据库中的数据。因此,我从命令行启动sqlite3 shell(sqlite3.exe),然后使用以下命令打开数据库:
.open文件名
此后,我要检查由我的应用程序创建的表,但始终会收到“表不存在”错误。
然后我使用“ select * from sqlite_master;”,但仍返回空结果。
我将进行以下更多测试:
.open --readonly FileName;
从sqlite_master中选择*;
然后我将看到“数据库已锁定”错误。我尝试在Stackoverflow上搜索解决方案,所有解决方案仅建议关闭正在访问数据库的其他应用程序。但是,我需要让应用程序仍然访问数据库,同时我仍然可以查看(而不修改)sqlite数据库中的内容,这可能吗?
因此,我只是想知道是否可以通过sqlite3.exe shell访问由另一个程序同时打开的sqlite数据库? 目前只有我的应用程序将写入数据库,而sqlite3 shell仅需要读取数据库中的数据。
答案 0 :(得分:0)
您好,您可以使用“ SQlite数据库浏览器”。使用此工具,您可以轻松创建sqlite数据库并插入行。您也可以查看插入的数据。
答案 1 :(得分:0)
如果sqlite_master
为空,则可能是您使用CLI工具打开了错误的文件,或者编写的应用程序可能未提交创建您要查找的表的事务。
如果您需要一个编写者和一个读者进程,那么最好检查https://www.sqlite.org/wal.html并确保在两个进程中都正确打开了数据库。
如果这仅用于调试,则也许使用https://www.sqlite.org/backup.html Backup API也是一种解决方案。这样一来,您就可以将数据库转储到一个单独的文件中,从而可以在读取时忽略并发问题。