Delphi 中 SQLite 如何读写二进制字段(Blob类型)
(2011-04-27 17:56:39)
标签:
杂谈 |
分类: sqlite |
在Delphi中,有大量的组件可以操作SQLite数据库,如UniDAC就是其中一个比较优秀的,当然还有ASQLite3Components,也有SQLite3版的ODBC驱动,可直接用ADO操作。本文简要说明SynopseSQLite3读写二进制字段,先说下SynopseSQLite3的优点,静态编译集成SQLite3引擎,不需要额外的DLL支持,支持SQLite3加密,支持JSON表,支持网络版的SQLite3.支持线程安全保护.
首先建一个表,字段类型为BLOB
SL.Add('CREATE TABLE IF NOT EXISTS TEST (');
SL.Add('FileName TEXT PRIMARY KEY,');
SL.Add('Data BLOB);');
SL.Add('');
写入二进制数据:
var
FFileStream:TFileStream;
FData:array of Char;
FSQLR:TSQLRequest;
ASQL:AnsiString;
begin
FFileStream:=TFileStream.Create('test.xml',fmOpenReadWrite);
ASQL:='INSERT INTO TEST(FileName,Data)
VALUES('+QuotedStr('test.xml')+',?)';
try
SQLite数据库对象.Execute('DELETE FROM TEST');
//
SetLength(FData,FFileStream.Size);
FFileStream.Position:=0;
FFileStream.Read(PChar(FData)^,Length(FData));
FSQLR.Prepare(SQLite数据库对象.DB,ASQL);
FSQLR.Bind(1,PChar(FData),Length(FData));
FSQLR.Execute;
finally
FreeAndNil(FFileStream);
end;
其中问号是参数,SQLite数据库对象类型为TSQLDataBase
读取数据并写入到文件:
var
FBlobField:TSQLBlobStream;
FFileStream:TMemoryStream;
FData:array of Char;
begin
try
FFileStream:=TMemoryStream.Create;
FBlobField:=SQLite数据库对象.Blob('','TEST','Data',1,True);
try
FBlobField.Position:=0;
SetLength(FData,FBlobField.Size);
FBlobField.ReadBuffer(PChar(FData)^,FBlobField.Size);
FFileStream.Write(PChar(FData)^,FBlobField.Size);
FFileStream.SaveToFile("test.xml");
finally
FreeAndNil(FBlobField);
FreeAndNil(FFileStream);
end;
except
Result:='';
end;
首先建一个表,字段类型为BLOB
SL.Add('CREATE TABLE IF NOT EXISTS TEST (');
SL.Add('FileName TEXT PRIMARY KEY,');
SL.Add('Data BLOB);');
SL.Add('');
写入二进制数据:
var
begin
其中问号是参数,SQLite数据库对象类型为TSQLDataBase
读取数据并写入到文件:
var
begin