Ok, Let me do it with C language const unsigned char* Format(const char* szFormat, ...); int AudioFillDatabase(const char* audiofile); int main(void) { Open(); execDML(" CREATE TABLE IF NOT EXISTS AudioTable (id INTEGER , \n" " name VARCHAR , \n" " data BLOB , \n" " type VARCHAR);"); AudoFillDatabase(SomeSongname.xxx); Close(); exit(0); } int AudioFillDatabase(const char* audiofile) { FILE* fp = fopen(audiofile, "rb"); if ( fp == NULL ) return -1; else { fseek(fp, 0, SEEK_END); long filesize = ftell(fp); unsigned char* MemFileSize = new unsigned char[filesize + 1]; size_t ret = fread(MemFileSize, filesize, 1, fp); if ( ret != 0 ) return -1; else { unsigned char* buf = new unsigned char[filesize+1024]; buf = Format("insert into AudioTable values (0, 'music', %Q, 'mp3');", MemFileSize); execDML(buf); } } const char* format(const char* szFromat, ...) { va_list va; va_start(va, szFormat); static char* mpBuf = sqlite3_vmprintf(szFormat, va); va_end(va); return mpBuf; } ----- Original Message ----- From: "Isaac Raway" <[EMAIL PROTECTED]> To: <sqlite-users@sqlite.org> Sent: Tuesday, November 28, 2006 11:04 PM Subject: Re: [sqlite] Music Files
> On 11/27/06, LuYanJun <[EMAIL PROTECTED]> wrote: >> >> Can anybody give a simple example for domestrating ? >> I am puzzled by this topic, how does a music file be sotred in DB as BLOB >> type? > > > You can insert /any/ kind of data into a SQLite database (or most any other > sort of DB for that matter). Here's a short Pascal program that would do > about what you want -- but of course getting the binary data out and into an > object that can play it is another matter. Also I imagine this would be very > slow, coming in at around 3 - 5 MB per song that has to be completely loaded > into memory from the DB before playback and begin. I have not tested this > but it gives you the idea: 1) load data into a stream / data string 2) write > as DB BLOB. > > var > MP3Source: string; > Data: TFileStream > > DBFileName: string; > DB: TSQLiteDatabase; > MustCreate: boolean; > begin > MP3Source := 'SomeSong.mp3'; > DBFileName := 'mp3.db3'; > > MustCreate := not FileExists(DBFileName); > DB := TSQLiteDatabase.Create(DBFileName); > try > if MustCreate then begin > DB.ExecSQL('CREATE TABLE mp3(filename STRING PRIMARY KEY, data > BLOB);'); > end; > > Data := TFileStream.Create(MP3Source, fmOpenRead); > try > Data.Seek(0); > > DB.UpdateBlob('INSERT OR UPDATE INTO mp3(filename, data) ' + > 'VALUES(' + QuotedStr(MP3Source) + ', ?);', Data); > finally > FreeAndNil(Data); > end; > finally > DB.Close; > FreeAndNil(DB); > end; > end; >