SQLiteBrowser:SQLite数据库高效查看工具

SQLiteBrowser:SQLite数据库高效查看工具

本文还有配套的精品资源,点击获取

简介:SQLiteBrowser是一款开源的SQL数据库浏览器,适用于Windows平台,提供用户友好的图形界面来浏览、编辑和管理SQLite数据库。支持通过SQL查询语句检索数据,并执行基本的数据库操作,如创建、修改、导入导出及权限管理。无论对于数据库管理员、开发者还是普通用户,该工具都能简化数据库管理过程,提升工作效率。

1. SQLite数据库概念介绍

SQLite 是一个轻量级的嵌入式SQL数据库引擎,它允许在应用程序内部直接处理数据库文件,而无需复杂的数据库服务器。它广泛应用于移动设备、桌面应用和嵌入式系统中,因其零配置、小型体积、高性能以及跨平台兼容性而备受青睐。SQLite遵循ACID属性,支持大多数SQL92标准,包括触发器、事务处理、视图、索引等特性。与传统数据库不同,SQLite不对数据库文件进行锁定,这意味着它可以被多个进程并发访问,但同时也能保证数据的一致性和完整性。在本章中,我们将从SQLite的核心概念入手,为读者提供一个基础知识框架,为深入学习SQLite的高级特性和工具使用打下坚实的基础。

2. SQLiteBrowser工具特点及安装

SQLiteBrowser 是一个开源的图形界面工具,专为 SQLite 数据库设计。它允许用户通过直观的用户界面进行数据库操作,包括设计、创建、查询和修改数据库。其具备强大的功能和用户友好的设计,使得 SQLiteBrowser 成为数据库管理员和开发者的热门选择。

2.1 SQLiteBrowser的界面布局

2.1.1 主要功能区域解析

SQLiteBrowser 的界面布局分为几个主要的功能区域,包括主工具栏、数据库结构视图、查询编辑器、输出结果窗口等。用户可以在这些区域之间切换,以执行不同的数据库操作。

主工具栏 包含了访问基本功能的快捷方式,如新建或打开数据库、执行查询和编辑查询。 数据库结构视图 显示了数据库中的所有表、索引、触发器和视图。 查询编辑器 是一个文本编辑器,用于输入和编辑 SQL 查询语句。 输出结果窗口 显示了查询执行后的结果,以及数据库操作的任何错误或警告消息。

2.1.2 快捷工具栏使用方法

快捷工具栏提供了访问最常用功能的一键式操作,如打开数据库、保存更改、撤销和重做等。用户可以自定义快捷工具栏,根据个人习惯添加更多功能。

2.2 SQLiteBrowser的特性与优势

2.2.1 跨平台支持分析

SQLiteBrowser 支持多个操作系统,包括 Windows、Linux 和 macOS。这意味着无论用户使用何种系统,都能享受到 SQLiteBrowser 提供的便利。

Windows 用户 可以通过安装程序或绿色版直接运行。 Linux 用户 可以通过包管理器安装,例如使用 apt-get 在 Ubuntu 上安装。 macOS 用户 可以通过下载 DMG 文件或使用 Homebrew 安装。

2.2.2 免费开源特性探讨

SQLiteBrowser 作为一个开源软件,其源代码可供任何人查看和修改。它采用了 GPL 许可证,这允许用户自由地分发和修改软件,而无需支付费用。这对于希望深入学习数据库操作或开发小型个人项目的人来说非常有吸引力。

在使用 SQLiteBrowser 时,用户可以轻松地查看和贡献源代码,这鼓励了社区参与和软件的持续改进。开源的特性也意味着社区可以快速响应安全漏洞或其他问题,从而保护用户的利益。

让我们继续深入了解如何安装 SQLiteBrowser,以便开始探索其功能。

安装 SQLiteBrowser 步骤

安装 SQLiteBrowser 相对简单,以下是基于不同操作系统的安装步骤:

Windows 平台

访问 SQLiteBrowser 官方网站下载最新版本的安装包。 运行安装程序并遵循指示完成安装。

Linux 平台

在基于 Debian 的系统(如 Ubuntu)中,可以使用以下命令:

sudo apt-get update

sudo apt-get install sqlitebrowser

在基于 RPM 的系统(如 Fedora)中,可以使用以下命令:

sudo dnf install sqlitebrowser

macOS 平台

对于 macOS 用户,可以使用 Homebrew 进行安装:

brew install sqlitebrowser

或者,用户可以直接下载 DMG 文件进行安装。

安装完成后,用户可以通过开始菜单找到 SQLiteBrowser 应用程序并启动它,开始使用这个工具的丰富功能。

安装 SQLiteBrowser 是使用数据库的第一步。接下来,我们将探索这个工具的界面布局和主要功能区域,以更好地理解如何使用 SQLiteBrowser 进行数据库操作。

[安装代码块和解释]

在本章的最后,我们将通过对比其他数据库管理工具,来更全面地了解 SQLiteBrowser 的优势,以及它在数据库管理中的应用潜力。

[表格,展示不同数据库管理工具比较]

[结束本章节内容]

3. 图形用户界面(GUI)浏览数据库

图形用户界面(GUI)的应用使得用户可以直观地与SQLite数据库进行交互。在本章节中,我们将深入了解如何使用SQLiteBrowser这一工具,利用其GUI特点来浏览和管理数据库。

3.1 数据库连接与浏览

在数据世界里,第一步总是要建立与数据源的连接。对于SQLite数据库而言,这意味着我们要配置好SQLiteBrowser,并打开或创建一个新的数据库文件。

3.1.1 建立新数据库连接

要开始使用SQLiteBrowser浏览数据库,首先要连接到现有的数据库文件或创建一个新的数据库文件。这个过程简单且直观,让我们来分步探讨:

1. **启动SQLiteBrowser**:打开程序后,你会看到一个简洁的界面,等待我们输入数据库文件的相关信息。

2. **选择数据库文件**:通过“File”菜单选择“Open database”选项,或者直接点击工具栏上的“Open”图标,来浏览并选择要连接的SQLite数据库文件(.sqlite)。

3. **创建新数据库文件**:如果数据库文件尚不存在,可以选择“File”菜单中的“New Database”选项,并指定新文件的保存位置及名称。

4. **输入连接信息**(如需要):在连接到远程数据库或有特定登录凭证的数据库时,可能需要在弹出的对话框中输入主机地址、端口、数据库名称、用户名和密码等信息。

5. **验证连接**:点击“OK”或“Connect”,程序将尝试连接到数据库。如果连接成功,你将看到数据库的结构信息出现在界面中。

3.1.2 数据库结构和数据的可视化

连接成功后,SQLiteBrowser的界面将会展现出数据库的结构和数据。我们可以看到以下几个主要部分:

数据库对象列表 :左侧树状结构显示了数据库中的所有对象,如表、索引、视图等。 表数据视图 :在选择了某个表后,该表的结构会显示在中间的表结构区域,表中的数据将展示在下方的数据视图区域。 SQL查询窗口 :界面底部提供了一个SQL查询窗口,可以进行SQL语句的输入和执行。

3.2 数据表的操作和管理

数据表是数据库中最重要的组成部分,存储了所有的数据。在本小节中,我们将了解如何在SQLiteBrowser中创建、编辑表结构,以及如何浏览和编辑表内的数据。

3.2.1 创建和编辑表结构

SQLiteBrowser允许用户通过GUI创建新表,或对现有表的结构进行编辑。详细步骤如下:

1. **创建新表**:点击工具栏上的“New Table”按钮,或者选择“Table”菜单中的“Create Table”选项。会弹出一个对话框让你输入表名称和定义列(字段)信息,包括列名、数据类型、是否允许为空等。

2. **编辑表结构**:选择要编辑的表,然后点击“Alter Table”按钮。你可以通过弹出的对话框来修改列的定义、添加或删除列。

3. **删除表**:在数据库对象列表中选择要删除的表,然后选择“Table”菜单中的“Drop Table”选项。将出现一个确认对话框,确认后表将从数据库中移除。

3.2.2 表内数据的浏览与编辑

管理数据库的核心是数据的增删改查。SQLiteBrowser提供了对表内数据的直观操作,包括添加、修改、删除数据记录。

1. **浏览数据记录**:在表数据视图区域,你可以滚动查看表中的所有记录。每个字段的数据都可以通过点击进行排序。

2. **添加记录**:点击表数据视图右下角的“New Record”按钮,然后在弹出的对话框中输入新记录的数据。

3. **修改记录**:选择一条记录,直接在表数据视图区域中修改数据。修改完成后,点击“Update Record”按钮保存。

4. **删除记录**:选择一条记录后,点击“Delete Record”按钮删除当前选中的记录。

图表展示

为了提供更直观的展示,我们可以使用一张表格来总结数据表操作的常用功能:

操作类型 功能描述 创建新表 设计和建立新的数据表结构 编辑表结构 添加、修改、删除表中的列 查看表数据 浏览表中的所有数据记录 添加记录 向表中新增数据条目 修改记录 更新表中已有的数据条目 删除记录 移除表中的指定数据条目

以上就是使用SQLiteBrowser通过图形用户界面浏览和管理SQLite数据库的基本方法。接下来,我们将深入学习如何利用SQL语句进行数据的检索。

4. SQL查询语句的数据检索

4.1 SQL基础语法

SQL(Structured Query Language)是用于管理和操作关系数据库的标准编程语言。它允许用户查询、更新、插入和删除数据库中的数据。在本小节中,我们将深入了解SELECT语句的结构和用途,以及常用的SQL函数。

4.1.1 SELECT语句的结构与使用

SELECT语句是SQL中最基本和最常用的查询命令。它用于从数据库中检索数据,并可以根据需求以不同的方式组合和排序数据。一个基本的SELECT语句的结构如下:

SELECT column1, column2, ...

FROM table_name

WHERE condition;

SELECT 关键字后面跟着需要检索的列名。 FROM 关键字指定从哪个表中检索数据。 WHERE 子句是一个可选条件,用于过滤结果集。

举例来说,如果我们有一个学生信息表 students ,想要获取所有学生的姓名和年龄,可以使用以下查询:

SELECT name, age

FROM students;

为了进一步细化查询结果,比如只获取年龄大于18岁的学生,可以添加一个 WHERE 子句:

SELECT name, age

FROM students

WHERE age > 18;

在使用 SELECT 语句时,还可以利用一些聚合函数(如 COUNT() , SUM() , AVG() , MAX() , MIN() )来对数据进行统计分析。例如,以下查询可以获取学生总数:

SELECT COUNT(*)

FROM students;

4.1.2 常用SQL函数介绍

SQL提供了许多内置函数,用于对数据进行处理和转换。以下是几种常用的SQL函数:

COUNT() : 计算满足条件的行数。 SUM() : 计算一列的总和。 AVG() : 计算一列的平均值。 MAX() : 找出一列的最大值。 MIN() : 找出一列的最小值。 UPPER() , LOWER() : 将文本转换为全部大写或小写。 TRIM() : 去除字符串两端的空白。 CONCAT() : 连接两个或多个字符串。

使用这些函数可以帮助我们更高效地处理数据。例如,假设我们要找出 students 表中每个班级的平均年龄:

SELECT class_id, AVG(age) AS average_age

FROM students

GROUP BY class_id;

此查询使用 GROUP BY 对结果进行分组,并计算每个分组的平均年龄。

4.2 复杂查询与数据处理

在处理数据时,我们常常需要根据特定条件来过滤数据,或对数据进行分组和聚合。

4.2.1 条件查询(WHERE子句)

WHERE 子句允许我们根据指定条件过滤记录。可以使用逻辑运算符(如 AND , OR , NOT )来组合条件。以下是几个使用 WHERE 子句的例子:

获取特定学号的学生信息:

SELECT *

FROM students

WHERE student_id = 1002;

获取成绩在60分以上的学生信息:

SELECT *

FROM grades

WHERE score >= 60;

在查询中,字符串通常需要用单引号括起来,而数字则不需要。

4.2.2 聚合函数与数据分组

当需要对数据进行更复杂的统计时,聚合函数与 GROUP BY 子句可以一起使用。这允许我们对数据进行分组,并对每一组应用聚合函数。以下是几个使用聚合函数进行数据分组的例子:

获取每个班级的平均分数:

SELECT class_id, AVG(score) AS average_score

FROM grades

GROUP BY class_id;

获取每个班级人数:

SELECT class_id, COUNT(student_id) AS student_count

FROM students

GROUP BY class_id;

对于涉及多个表之间的连接查询,可以通过 JOIN 子句来实现。例如,如果需要获取学生的姓名和对应的班级名称,可以使用以下查询:

SELECT s.name, c.class_name

FROM students s

JOIN classes c ON s.class_id = c.id;

在实际应用中,SQL查询可以根据复杂的数据关系和业务需求进行灵活的构建和优化。掌握好基础语法和函数的使用,将为解决实际问题打下坚实的基础。接下来的章节将讨论如何在SQLiteBrowser中执行这些SQL查询,以及更高级的数据库操作。

5. 基本数据库操作支持

5.1 数据库的创建与修改

5.1.1 创建数据库与数据表

SQLite数据库是在本地文件系统上存储的,这意味着你不需要复杂的配置,只需创建一个文件即可开始数据库的使用。这一节将介绍如何通过命令行和SQLiteBrowser工具来创建一个数据库以及数据表。

使用命令行创建数据库相当简单,你只需启动SQLite,然后执行一条SQL语句来创建数据库。举例如下:

sqlite3 mydatabase.db

这行命令会创建一个名为 mydatabase.db 的数据库文件,如果文件不存在的话。在SQLite命令行工具中,你可以直接输入SQL语句来创建数据表。例如:

CREATE TABLE IF NOT EXISTS users (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT NOT NULL,

email TEXT NOT NULL UNIQUE

);

这里定义了一个名为 users 的数据表,包含三个字段: id (主键,自动增长)、 name 和 email (唯一字段)。

在SQLiteBrowser中,你可以通过图形界面创建新的数据库或打开现有的数据库。以下是通过SQLiteBrowser创建新数据表的步骤:

打开SQLiteBrowser。 在文件菜单中选择“新建数据库”,输入数据库名称并保存。 在数据库浏览器界面的左侧面板,你会看到刚创建的数据库,右键点击“新建表”。 在弹出的对话框中定义表的名称和字段,然后确认创建。

5.1.2 修改数据表结构

数据表创建后,可能需要根据新的业务需求修改表结构,比如添加或删除字段、修改字段类型等。在SQLite中,可以使用 ALTER TABLE 语句来进行这些操作。

举个例子,如果你需要添加一个新字段到 users 表中:

ALTER TABLE users ADD COLUMN age INTEGER;

如果你想删除某个字段:

ALTER TABLE users DROP COLUMN age;

在SQLiteBrowser中,操作步骤如下:

在数据库浏览器界面的左侧选择“表”。 右键点击你想要修改的表,选择“设计表”。 在打开的设计视图中,你可以直接编辑字段属性,如添加或删除字段。 完成修改后点击“应用更改”,你的数据库结构就会被更新。

请注意,修改数据表结构可能会影响到依赖该表的应用程序和数据库完整性,所以在执行这些操作之前应该进行充分的测试和备份。

5.2 数据的导入导出功能

5.2.1 从CSV导入数据

有时候,我们可能需要将现有数据(如CSV文件中的数据)导入到SQLite数据库中。SQLiteBrowser提供了方便的工具来完成这一工作。

按照以下步骤从CSV文件导入数据:

在SQLiteBrowser中,打开你想要导入数据的表。 点击“表”菜单下的“导入CSV文件”选项。 浏览文件系统,选择你想要导入的CSV文件。 根据提示,设置分隔符(通常是逗号或制表符),确认是否包含列标题,并选择要导入到的表和字段。 如果CSV文件中的数据类型和SQLite表中的数据类型不匹配,系统会提示你进行转换。 完成以上步骤后,点击“导入”,数据就会被插入到数据库表中。

5.2.2 数据的导出操作

导出数据对于备份和数据迁移是很有用的。SQLiteBrowser提供了从数据库中导出数据到CSV文件的功能。以下是导出数据的步骤:

在数据库浏览器界面,右键点击你想要导出数据的表,选择“导出表为CSV文件”选项。 输入CSV文件的名称和保存位置。 可以选择是否导出列标题、是否使用双引号包围字符串和是否包含NULL值。 点击“保存”,数据将被写入指定的CSV文件。

表格数据的导入导出是数据库操作中非常重要的环节,尤其对于数据备份和迁移、与其他系统数据集成等方面。在进行这些操作时,应当注意数据类型和编码的兼容性问题,以确保数据的完整性和准确性。

6. 权限管理功能

权限管理是数据库系统中确保数据安全和完整性的重要组成部分。SQLite作为一个轻量级的数据库,虽然没有像MySQL或PostgreSQL那样复杂的权限管理机制,但它仍然提供了一套基本的权限管理功能,可以用来控制用户对数据库的访问权限。本章将深入探讨如何在SQLite中进行用户权限的设置,以及数据库安全性分析,包括数据备份与恢复、加密与解密数据库的操作。

6.1 用户权限设置

在SQLite中,权限是通过PRAGMA语句来设置的,这与传统的SQL权限设置方式有所不同。用户必须手动运行PRAGMA语句来修改数据库的权限设置。

6.1.1 创建与管理用户账户

SQLite没有内置的用户认证机制,它依赖于操作系统级别的用户管理。但是,我们可以通过创建不同的数据库文件和使用文件系统权限来模拟多用户环境。

创建用户账户 - 实际上是创建不同的数据库文件,每个数据库文件关联一个特定的用户或用户组。 管理用户账户 - 通过文件系统的权限设置来管理用户的读写权限。例如,在Unix-like系统中,可以使用 chmod 命令来设置文件权限。

# 创建一个新的数据库文件供新用户使用

touch /path/to/new_user_database.db

# 设置文件权限,例如,允许用户user1读写数据库

chmod 660 /path/to/new_user_database.db

6.1.2 权限分配与调整

在SQLite中,通过 PRAGMA 语句可以设置如下的权限:

PRAGMA read_only - 设置数据库为只读状态。 PRAGMA locking_mode - 设置锁模式,影响对数据库的并发访问。 PRAGMA journal_mode - 设置日志模式,影响事务处理和数据完整性。

-- 设置数据库为只读模式

PRAGMA read_only = true;

-- 设置锁模式为正常模式

PRAGMA locking_mode = NORMAL;

-- 设置日志模式为wal(Write-Ahead Logging)

PRAGMA journal_mode = wal;

调整权限通常需要数据库管理员权限,因为这涉及到数据库的系统配置。

6.2 数据库安全性分析

对于确保数据安全,除了权限设置之外,还需要考虑数据备份、恢复以及数据库文件的加密与解密。

6.2.1 数据备份与恢复

备份是数据库管理的关键部分。在SQLite中,可以通过简单的复制数据库文件来备份数据。

# 备份数据库到指定路径

cp /path/to/original_database.db /path/to/backup_database.db

在数据丢失或损坏的情况下,可以将备份的数据库文件复制回原路径来恢复数据。

6.2.2 加密与解密数据库

SQLite本身不提供内置的加密功能,但是可以使用第三方的加密库,如SQLCipher,来对数据库文件进行加密。SQLCipher基于SQLite,提供了透明的256位AES加密功能。

使用SQLCipher加密和解密数据库的基本步骤如下:

安装SQLCipher - 在系统中安装SQLCipher,并确保SQLCipher工具在环境变量中可用。 创建加密数据库 - 使用SQLCipher提供的命令行工具创建新的加密数据库。 加密现有数据库 - 可以使用SQLCipher的PRAGMA语句来对现有数据库文件进行加密。 解密数据库 - 使用SQLCipher工具对加密的数据库文件进行解密。

# 使用SQLCipher创建一个加密的数据库

sqlcipher /path/to/encrypted_database.db

关于加密和解密的详细步骤和参数,建议参考SQLCipher的官方文档和社区指南,因为这些操作比较复杂,通常涉及到密钥管理等安全问题。

在本章节中,我们了解了SQLite的用户权限设置和管理,以及基本的数据库安全性分析。通过设置文件系统权限来模拟用户账户,以及使用PRAGMA语句调整数据库的访问权限。同时,我们也探讨了数据备份与恢复的基本操作,以及使用SQLCipher来增强SQLite数据库文件的安全性。在进行数据库的安全管理时,务必要考虑到各种可能的安全威胁,并采取相应的措施来保护数据。在接下来的章节中,我们将进一步探索SQLiteBrowser的高级应用,以提高工作效率和数据库管理的能力。

7. SQLiteBrowser的高级应用

7.1 外键和索引的管理

7.1.1 创建和维护外键

在数据库设计中,外键是用于表间引用的重要概念。在SQLiteBrowser中,用户可以通过图形界面或SQL语句来创建外键。

图形界面操作:

打开SQLiteBrowser,连接到目标数据库。 在对象浏览器中找到并双击需要添加外键的表。 进入设计模式,找到“关系”选项卡。 点击“新建关系”按钮,选择外键所在的列和参照表的列。 确认设置,保存设计。

SQL语句操作:

ALTER TABLE child_table

ADD CONSTRAINT fk_child_to_parent

FOREIGN KEY (child_column) REFERENCES parent_table(parent_column);

上述SQL语句创建了一个名为 fk_child_to_parent 的外键 child_column ,该外键引用了 parent_table 的 parent_column 。

外键的维护包括检查外键约束、更新或删除外键。例如,如果需要删除外键:

ALTER TABLE child_table

DROP FOREIGN KEY fk_child_to_parent;

维护外键时需要考虑引用完整性和数据一致性,错误的外键操作可能会导致数据丢失或错误。

7.1.2 索引的优化使用

索引能够加速数据库查询操作,但在添加索引时也需要权衡存储空间和写操作的性能开销。通过SQLiteBrowser的索引管理功能,可以轻松地查看和管理表中的索引。

查看现有索引:

在SQLiteBrowser中打开目标数据库。 在对象浏览器中找到并双击需要查看索引的表。 查看表结构下方的索引列表。

创建索引:

在设计模式下找到“索引”选项卡。 点击“新建”按钮。 输入索引名称和对应的列名。 保存并执行。

删除索引:

在索引列表中选择需要删除的索引。 点击“删除”按钮。 确认删除操作。

优化索引使用时,可以考虑以下几点:

创建复合索引时,将经常用于查询条件的列放在索引的前面。 定期清理不再使用的索引。 使用 EXPLAIN QUERY PLAN 语句分析查询性能,以确定哪些索引是有效的。

7.2 插件和脚本扩展

7.2.1 SQLiteBrowser插件功能介绍

SQLiteBrowser提供了一个插件架构,允许用户扩展其功能。插件可以增加新的工具栏按钮、菜单项或其他界面元素,从而实现更复杂的功能。

安装插件的步骤如下:

下载所需的插件文件(通常是 .so 或 .dll 格式)。 启动SQLiteBrowser。 从菜单选择“插件”>“管理插件”。 点击“加载”按钮,选择下载的插件文件进行加载。

一旦加载成功,用户就可以看到插件提供的新功能。某些插件可能会添加额外的工具栏按钮或菜单项,用户可以通过这些新界面元素使用插件功能。

7.2.2 使用脚本自动化任务

SQLiteBrowser支持使用脚本来自动化常规任务,比如批量更新数据、生成报表等。脚本通常使用SQLite的命令行接口或支持的脚本语言编写。

在SQLiteBrowser中执行脚本的步骤如下:

从菜单中选择“工具”>“执行脚本…”。 在弹出的对话框中选择或输入脚本文件。 执行脚本,查看输出结果。

例如,可以创建一个Python脚本,用于遍历数据库中所有的表并打印表结构信息:

import sqlite3

# 连接到SQLite数据库

# 数据库文件是当前目录下的test.db

conn = sqlite3.connect('test.db')

cursor = conn.cursor()

# 遍历数据库中所有的表

cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")

tables = cursor.fetchall()

# 打印每个表的结构

for table in tables:

cursor.execute("PRAGMA table_info({});".format(table[0]))

print(table[0], "columns:")

for row in cursor.fetchall():

print("\tColumn:", row[1], "Type:", row[2], "NotNull:", row[3], "Default:", row[4])

# 关闭数据库连接

conn.close()

以上脚本展示了如何通过Python和SQLite的PRAGMA命令来获取数据库中所有表的列信息。自动化脚本可以大大提升工作效率,尤其是对于大型数据库和重复性的任务。

本文还有配套的精品资源,点击获取

简介:SQLiteBrowser是一款开源的SQL数据库浏览器,适用于Windows平台,提供用户友好的图形界面来浏览、编辑和管理SQLite数据库。支持通过SQL查询语句检索数据,并执行基本的数据库操作,如创建、修改、导入导出及权限管理。无论对于数据库管理员、开发者还是普通用户,该工具都能简化数据库管理过程,提升工作效率。

本文还有配套的精品资源,点击获取

相关推荐

dnf星辰护肩哪个频道

dnf星辰护肩哪个频道

08-09 👁 5347
搜索:网球

搜索:网球

08-04 👁 3798
太阳的寿命还有多长时间?