SQLite是一个老牌的轻量级别的本地文件数据库,彻底免费且开源,不须要安装,无须任何配置,固然,这样管理功能就不是很强大了,可是它的主要应用也是在本地数据库,能够说是最简单好用的嵌入式本地数据库了。sql
SQLite只要一个DLL就能够实现所有功能。SQLite不须要数据库引擎,只有一个数据文件,占用系统资源很是少,很适合作Demo或小型应用。数据库
同时,SQLite也是关系型数据库,支持大部分SQL语句。它支持事务机制和blob数据类型,支持大部分SQL92标准,最大支持数据库到2T。app
它还有Python、Tcl、PHP、Java的绑定,这些语言能够直接使用SQLite数据库,由于它们自身包含了支持;还有ODBC接口,很是方便使用。ide
SQLite的一些基本操做跟SQL很相似,基本上有SQL基础的都能看明白。函数
SQLite的图像查看工具备不少,好比SQLiteSpy、SQLiteBrowser等。工具
SQLite默认是utf8编码,使用pragma encoding能够看出数据库的编码。测试
创建数据库后,能够直接输入“pragma encoding = UTF8/UTF16”来改变编码,但数据库有了数据之后,编码是不能够修改的。编码
SQLite的源码能够http://www.sqlite.org得到。关于SQLite的更进一步的语法和信息,请参http://www.sqlite.com.cn/http://www.sqlitecn.org。spa
这里有一个delphi中使用sqlite3的demo:http://www.itwriting.com/blog/articles/a-simple-delphi-wrapper-for-sqlite-3/comment-page-2code
这个demo中包含了sqlite3.pas,sqlite3table.pas,sqlite.dll三个文件,里面包含了操做sqlite3的源代码,利用这三个文件,就不须要第三方组件了
procedure TfrmAbout.btnVersionClick(Sender: TObject); var SqliteDB :TSQLiteDatabase; begin SqliteDB :=TSQLiteDatabase.Create(''); showmessage('Sqlite dll version:'+SqliteDb.version); SqliteDB.Free; end;
编译运行,成功的话,将会显示当前的sqlite dll的版本号
在simple sqlite3.0 for delphi的几个文件中,主要用到两个文件。分别是sqlite3.pas,sqlite3table.pas。
在delphi中,经过sqlite3table.pas来实现对sqlite数据库的各类访问。
有一个叫作test.db的sqlite数据库文件,在编译生成的exe文件所在的目录。里面有一个叫作testTable的表格。
下面是根据demo提练出来的读写语句:
1 unit TestSqlite; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, SQLiteTable3; 8 9 type 10 TForm1 = class(TForm) 11 lbl1: TLabel; 12 ebID: TEdit; 13 ebName: TEdit; 14 lbl2: TLabel; 15 lbl3: TLabel; 16 ebNumber: TEdit; 17 memNotes: TMemo; 18 btnTest: TButton; 19 procedure btnTestClick(Sender: TObject); 20 private 21 { Private declarations } 22 public 23 { Public declarations } 24 end; 25 26 var 27 Form1: TForm1; 28 29 implementation 30 31 {$R *.dfm} 32 33 procedure TForm1.btnTestClick(Sender: TObject); 34 var 35 slDBpath: string; 36 sldb: TSQLiteDatabase; 37 sltb: TSQLIteTable; 38 sSQL: String; 39 Notes: String; 40 41 begin 42 slDBPath := ExtractFilepath(application.exename) 43 + 'test.db'; 44 sldb := TSQLiteDatabase.Create(slDBPath); 45 try 46 if sldb.TableExists('testTable') then 47 begin 48 sSQL := 'DROP TABLE testtable'; 49 sldb.execsql(sSQL); 50 end; 51 52 sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,'; 53 sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB, [picture] BLOB COLLATE NOCASE);'; 54 sldb.execsql(sSQL); 55 sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);'); 56 57 //begin a transaction 58 sldb.BeginTransaction; 59 sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Some Name",4,587.6594,"Here are some notes");'; 60 //do the insert 61 sldb.ExecSQL(sSQL); 62 sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");'; 63 //do the insert 64 sldb.ExecSQL(sSQL); 65 //end the transaction 66 sldb.Commit; 67 // 缘由:它以文件的形式存在磁盘中,每次访问时都要打开一次文件,若是对数据库进行大量的操做,就很慢。 68 // 解决办法:用事物的形式提交,由于开始事务后,进行的大量操做语句都保存在内存中, 69 // 当提交时才所有写入数据库,此时,数据库文件也只用打开一次。若是操做错误,还能够回滚事务。 70 71 //query the data 72 sltb := sldb.GetTable('SELECT * FROM testtable'); 73 try 74 if sltb.Count > 0 then 75 begin 76 77 //display first row 78 //display second row 79 //sltb.Next; 80 ebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']); 81 ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID'])); 82 ebNumber.Text := floattostr( sltb.FieldAsDouble(sltb.FieldIndex['Number'])); 83 Notes := sltb.FieldAsBlobText(sltb.FieldIndex['Notes']); 84 memNotes.Text := notes; 85 end; 86 87 finally 88 sltb.Free; 89 end; 90 91 finally 92 sldb.Free; 93 end; 94 end; 95 96 end.