Delphi中使用SQLite3(一)

来源:互联网 发布:windows professor 编辑:程序博客网 时间:2024/05/17 02:42


        SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

       SQLite的最新版本是SQLite3,官网http://www.sqlite.org/,听说SQLite3还可以当内存数据库,特地研究一下。SQLite3的基本使用,我这边就不再介绍,网上很多,大家可以参考http://yuanzhifei89.iteye.com/blog/1123870这篇文章。

       SQLite3,用C语言编写,有给C++提供很方便的类库,但是Delphi却不能使用,但是总有Delphi牛人把SQLite3的API封装了一下,方便Delphi调用。我使用的封装类是sqlite simple delphi,SQLite3官网上面还有很多其它的封装类,有兴趣的可以研究一下,http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

       sqlite simple delphi的官网网站是http://www.itwriting.com/blog/?page_id=659,下载下来以后是一个压缩包里面是一个demo。咱们需要里面的两个文件。SQLite3.pas 跟 SQLiteTable3.pas ,把他们复制到工程目录下面,然后在需要操作库的单元文件里面 uses SQLiteTable3 。

procedure TForm1.btnTestClick(Sender: TObject);varslDBpath: string;sldb: TSQLiteDatabase;sltb: TSQLIteTable;sSQL: String;Notes: String;begin  slDBPath := ExtractFilepath(application.exename)+ 'test.db';  sldb := TSQLiteDatabase.Create(slDBPath);  try    if sldb.TableExists('testTable') then    begin      sSQL := 'DROP TABLE testtable';      sldb.execsql(sSQL);    end;    sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,';    sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB, [picture] BLOB COLLATE NOCASE);';    sldb.execsql(sSQL);    sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);');    //begin a transaction    sldb.BeginTransaction;    sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Some Name",4,587.6594,"Here are some notes");';    //do the insert    sldb.ExecSQL(sSQL);    sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");';    //do the insert    sldb.ExecSQL(sSQL);    //end the transaction    sldb.Commit;    //query the data    sltb := slDb.GetTable('SELECT * FROM testtable');    try      if sltb.Count > 0 then      begin        //display first row        ebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']);        ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID']));        ebNumber.Text := floattostr( sltb.FieldAsDouble(sltb.FieldIndex['Number']));        Notes :=  sltb.FieldAsBlobText(sltb.FieldIndex['Notes']);        memNotes.Text := notes;      end;    finally      sltb.Free;    end;  finally    sldb.Free;  end;end;
当数据库的路径包含中文的时候,使用sqlitetable3就打不开数据库了,我把sqlitetable3的源码改动了一下,中文路径就能正常识别了。

修改后的SQLite3.pas 跟 SQLiteTable3.pas下载地址


当SQLite3作内存数据库时,只需要将数据库路径改成“:memory:”即可,其它的操作如创建表、查询表都是和操作本地数据库一样的,如下:

SqlDb := TSQLiteDatabase.Create(':memory:');


我编写的Delphi使用SQLite3的Demo,包括本地数据库和内存数据库,本地数据库加载到内存,内存数据库备份到本地,下载地址


用记事本打开sqlite3的数据库文件,发现之前我们插入的数据都能看到,几乎都是明文显示的,这很明显是不满足我们要求的。请关注下一篇文章,关于SQLite3的加密。

0 0
原创粉丝点击