// 定义一个函数,创建一个表,用于存储歌曲的信息 procedure CreateTable; var SQL: string; begin // 定义一个SQL语句,创建一个名为songs的表,包含三个字段:id(整数,主键),name(字符串),data(二进制) SQL := 'create table if not exists songs (id integer primary key, name text, data blob)'; // 执行SQL语句 DBConnection.ExecSQL(SQL); end;
// 定义一个函数,把一首mp3歌曲存入数据库 procedure SaveSongToDB(const FileName: string); var SongStream: TFileStream; SongName: string; SQL: string; Query: TFDQuery; begin // 检查文件是否存在 if not TFile.Exists(FileName) then raise Exception.Create('File not found: ' + FileName); // 检查文件是否为mp3格式 if not SameText(TPath.GetExtension(FileName), '.mp3') then raise Exception.Create('File is not mp3: ' + FileName); // 获取歌曲的文件名(不含扩展名) SongName := TPath.GetFileNameWithoutExtension(FileName); // 创建一个文件流,用于读取歌曲的数据 SongStream := TFileStream.Create(FileName, fmOpenRead); try // 定义一个SQL语句,向songs表中插入一条记录,使用参数化查询 SQL := 'insert into songs (name, data) values (:name, :data)'; // 创建一个TFDQuery对象,用于执行SQL语句 Query := TFDQuery.Create(nil); try // 设置TFDQuery对象的连接为DBConnection Query.Connection := DBConnection; // 设置TFDQuery对象的SQL语句为SQL Query.SQL.Text := SQL; // 为SQL语句中的参数赋值,分别为歌曲的文件名和数据 Query.ParamByName('name').AsString := SongName; Query.ParamByName('data').LoadFromStream(SongStream, ftBlob); // 执行SQL语句 Query.ExecSQL; finally // 释放TFDQuery对象 Query.Free; end; finally // 释放文件流 SongStream.Free; end; end;
// 定义一个函数,关闭数据库连接 procedure CloseDBConnection; begin // 如果数据库连接已经打开,关闭数据库连接 if DBConnection.Connected then DBConnection.Close; // 释放数据库连接对象 DBConnection.Free; end;
可以通过下面的方法获取MP3的信息,并将这些信息写进数据库里方便管理。 你可以将MP3的文件的路径存放到数据库里,不建议将MP3的文件以流的形式写进数据库,否则会将数据库撑得很大。 type TId3Tag=packed record tagID :array[0..2] of Char title :array[0..29] of Char artist :array[0..29] of Char album :array[0..29] of Char Year :array[0..3] of Char Comment :array[0..29] Char Genre :Byte;//种类标识