2011-11-30 74 views
1

所以我正在创建一个应用程序,需要我在内存中存储多个播放列表。每个播放列表由一组指定顺序的歌曲组成。显然,将整个mp3存储在数据库本身是不合理的。我存储它的方式是,存储它的名称,位置,艺术家,专辑和唯一的ID号码。SQLiteDatabase:在运行时动态创建多个表?

我的问题是这样的:

如何使它所以每个播放列表可以在数据库中它自己的表?

所以每个播放列表表看起来像这样:

Playlist { 
    _id PRIMARY KEY AUTOINCREMENT INTEGER, 
    title TEXT, 
    uri TEXT, // Location of file in the phone 
    album TEXT, 
    artist TEXT 
} 

...我已经寻找了表预定义每个教程,不能在运行时动态创建。

另外,如果你们认为为每个播放列表创建一个新表并不是最好的方式去解决这个问题,你有什么建议?

回答

2

不要在运行时动态地创建表,这是疯了。你可以用一个非常简单的表格结构来做到这一点,任何人都可以很容易地理解你的程序是否被赋予别人。

您只需要创建一个播放列表表格和PlaylistItems。播放列表将包含在最低限度(id,名称)。 PlayListItems会是(id,playlist_id,艺术家,专辑,位置,排序)。 PlayListItems.playlist_id将是一个回到PlayList.id字段的外键。通常这很容易,因为您会按用户的名称显示播放列表的列表。然后当点击它时,您将分别调用以获取播放列表的内容(从PlayListItems中选择*,其中playlist_id =?)。

另一种方法是简单地让PlayListItems包含(id,playlist_id,media_id,ordering),其中media_id将作为媒体表中的外键,它将容纳您在设备上找到的所有MP3。在这种情况下,您不需要将艺术家姓名,专辑和文件位置复制到该表格中,这可以帮助节省空间,并且在媒体更改时保留任何重复的工作以更新这些表格。缺点是你需要一起加入PlayListItems和Media来获取信息,但是表上的索引应该能够保持它的快速执行。

+0

谢谢!我知道我可以做到这一点,但我想知道是否可以在运行时动态创建它们。既然你说疯了,我会接受你的话。 – bfresh