我正在使用DB操作开发一个Android应用程序。出于调试目的,我从enter link description here安装了SQLite浏览器。我的问题是,当我从模拟器导出数据库文件并在浏览器中打开它时,它仅显示元数据,而不显示我的实际应用程序数据。enter image description here

是的,我已经使用Android设备管理器从正确的位置导出了db文件。enter image description here

如您所见,在数据库文件夹中还创建了一些其他文件(journal和.file)。
所以我想知道是否有人知道最近在SQLite DB中存储数据的方式是否有任何变化。我正在使用Android Studio 3.0.1。

先谢谢您的帮助。

这是带有程序包名称的新屏幕截图。enter image description here

来自通用SQLite实用程序的日志

D/SQLITE_CSU: logCursorColumns invoked. Cursor has the following 4 columns.

D/SQLITE_CSU: Column Name 1 is id

D/SQLITE_CSU: Column Name 2 is title

D/SQLITE_CSU: Column Name 3 is uid

D/SQLITE_CSU: Column Name 4 is address

D/SQLITE_CSU: logCursorData Cursor has 1 rows with 4 columns.

D/SQLITE_CSU: Information for row 1 offset=0
                For Column id Type is INTEGER value as String is 1 value as long is 1 value as double is 1.0

                For Column title Type is STRING value as String is BBC value as long is 0 value as double is 0.0

                For Column uid Type is STRING value as String is PajUFVIZvKbNWAHAgdJ9xpf6gi33 value as long is 0 value as double is 0.0

                For Column address Type is STRING value as String is http://feeds.bbci.co.uk/news/world/rss.xml value as long is 0 value as double is 0.0


这是logDatabaseInfo日志“-

D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/com.rss.feedster.rss_feedster/databases/rssFeeds
D/SQLITE_CSU: Database Version = 3
D/SQLITE_CSU: Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
D/SQLITE_CSU: Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table Name = feeds Created Using = CREATE TABLE feeds(id INTEGER PRIMARY KEY,title TEXT,uid TEXT,address TEXT)
D/SQLITE_CSU: Table = feeds ColumnName = id ColumnType = INTEGER Default Value = null PRIMARY KEY SEQUENCE = 1
D/SQLITE_CSU: Table = feeds ColumnName = title ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = feeds ColumnName = uid ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = feeds ColumnName = address ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table Name = user_info Created Using = CREATE TABLE user_info(id INTEGER PRIMARY KEY,uid TEXT,nickname TEXT,email TEXT,age TEXT,mobile TEXT,password TEXT,gender TEXT,photoURL TEXT)
D/SQLITE_CSU: Table = user_info ColumnName = id ColumnType = INTEGER Default Value = null PRIMARY KEY SEQUENCE = 1
D/SQLITE_CSU: Table = user_info ColumnName = uid ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = nickname ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = email ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = age ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = mobile ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = password ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = gender ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
D/SQLITE_CSU: Table = user_info ColumnName = photoURL ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0

最佳答案

我相信您只是在错误的位置查找,单击“浏览数据”选项卡,然后选择“消息”表将显示是否有任何数据。

原因是您正在查看数据库结构,它向您显示了表和将/将用于创建它们的SQL,以及列和列定义的SQL。

具有名为android_metadata的表很可能表明该数据库来自Android设备,而不是来自其他来源,即您只能在Android设备上找到它。

屏幕快照显示有一个名为Messages的表,该表不是自动生成的,也不是由SQLite创建的。根据屏幕快照,它至少有两列。一个名为type,具有定义的INTEGER列类型以及NOT NULL约束,另一列则称为entry,具有column_type BLOB。

这是一个类似的数据库,它是从仿真器复制而来的,显示了当您查看数据库结构(Friends是表,并且列已扩展)时,它的外观(填充1行)。

android - 我的数据库记录未显示在SQLite浏览器中-LMLPHP

请注意,浏览数据表已突出显示,并带有指向它的箭头。单击此将显示类似:

android - 我的数据库记录未显示在SQLite浏览器中-LMLPHP

这正在浏览android_metadata表的数据(仅1行1列)。在突出显示的表格的右侧,有一个下拉菜单,单击它并选择Messages表。您的数据将显示,例如(显然这是针对“朋友”表的):-

android - 我的数据库记录未显示在SQLite浏览器中-LMLPHP


该表有1行6列


列_id的值为1
列_name的值是测试名称
等等



编辑有关调试信息。

显然,您打算从仿真器复制/导出的表不是您在DB Browser中为SQLite查找的数据库。您通过提供的实用程序提供的信息数据库是:

/data/data/com.rss.feedster.rss_feedster/databases/rssFeeds

因此,您要导出该文件,然后在DB Browser中为SQLite打开文件。

不是google_app_measurement_local.db

我认为问题基本上是您假设数据库必须具有.db文件扩展名。 .db(文件扩展名)不会影响仅用于指示文件类型的数据。

我毫不怀疑,如果您打开上面指示的文件,那么您将看到数据和结构与您期望的一样。请注意,要查看文件,请选择“文件名”输入右侧的“所有文件”。

作为示例,以下显示了导出/复制为db1.rumplestiltskin,然后在DB Browser中为SQLite打开的文件:-

android - 我的数据库记录未显示在SQLite浏览器中-LMLPHP

android - 我的数据库记录未显示在SQLite浏览器中-LMLPHP

修复

在设备监视器中,导出/复制/保存文件/data/data/com.rss.feedster.rss_feedster/databases/rssFeeds,然后在DB Browser中为SQLite打开文件;请注意,如果它没有.db或.sqlite文件扩展名,则必须从“文件名”输入右侧的“文件类型”选择器中选择“所有文件”,以便能够从文件浏览器中选择文件。

也许读过Filename extension,它更详细地说明了文件扩展名。

09-15 21:48
查看更多