数据库

Groove 音乐使用 sqlite 数据库进行歌曲信息、专辑信息和播放列表信息等数据的管理。

各个模块

entity

实体类模块,每个实体类实例用于保存一条数据表记录。

dao

数据库访问操作模块,DaoBase 作为基类封装了基本的数据库操作方法,使得子类无需编写重复的 SQL 语句就能操作数据库。

service

业务模块,业务类使用 Dao 类来操作数据库

controller

控制器模块,控制器类使用 Service 类来操作数据库,外部使用 controller 提供的接口来访问数据库。

数据表

tbl_song_info

歌曲信息表,对应 SongInfo 实体类:

字段 类型 描述
file str 文件路径
title str 标题
singer str 歌手
album str 专辑
year int 年份
genre str 流派
duration int 时长(s)
track int 曲目
trackTotal int 专辑曲目总数
disc int 光盘
discTotal int 光盘总数
createTime int 文件创建时间
modifiedTime int 文件修改时间

其中,file 字段有两种格式:

  • 本地音乐路径,比如:D:/Music/aiko - 二人.mp3

  • 在线音乐 URL

    • 虚假 URL,比如:http://kuwo/song/2333,播放时会被转换为真实 URL

    • 真实 URL

tbl_album_info

专辑信息表,对应 AlbumInfo 实体类:

字段 类型 描述
id str 专辑 id
singer str 歌手
album str 专辑名
year int 年份
genre str 流派
modifiedTime int 修改时间

tbl_singer_info

歌手信息表,对应 SingerInfo 实体类:

字段 类型 描述
id str 歌手 id
singer str 歌手名
genre str 流派

tbl_playlist

自定义播放列表,对应 Playlist 实体类:

字段 类型 描述
name str 播放列表名字
singer str 第一首歌的歌手名
album str 第一首歌的专辑名
count int 歌曲数量
modifiedTime int 修改时间

仔细想想,singeralbumcount 字段不应该保存到数据表中,而是在查询的时候填入实体类实例,罢了罢了,软件开发第一原则,程序能跑就行~~

tbl_song_playlist

自定义播放列表和歌曲信息中间表,对应 SongPlaylist 实体类:

字段 类型 描述
id str 记录 id
file str 文件路径
name str 播放列表名字

tbl_recent_play

最近播放表,对应 RecentPlay 实体类:

字段 类型 描述
file str 文件路径
lastPlayedTime int 最近播放时间
frequency int 播放次数