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的加密。
- Delphi中使用SQLite3(一)
- Delphi中使用SQLite3(二)
- DELPHI中引用sqlite3
- delphi中cxGrid使用汇总(一)
- Delphi 7 中使用RAVE报表(一)
- Windows 中 SQLite3 使用(1) -- 配置
- Windows 中 SQLite3 使用(1) -- 配置
- iOS 中SQLite3的使用(Demo)
- CodeIgniter中使用Sqlite3
- iOS中SQLite3使用
- IOS中SQLite3使用
- php 中使用sqlite3
- delphi中CreateMutex,OpenMutex使用一例
- 学习Sqlite3 (一)
- 在TCX中使用SQLite3
- 在TCX中使用SQLite3
- 在TCX中使用SQLite3
- 在TCX中使用SQLite3
- Java泛型与Restlet客户端
- 查看当前Android版本RemoteViews支持的UI对象
- Python入门教程推荐
- 索引
- uvm uvm_tlm_fifo的使用
- Delphi中使用SQLite3(一)
- Gson
- [NHibernate]存储过程的使用(一)
- dotnetziplibrary(dotnetziplib)解压中文文件名乱码解决方法
- ipad和iPhone尺寸和分辨率,点
- 搭建你的第一个Django应用程序
- 10061事件
- 函数指针/函数指针数组
- erlang binary 二进制错误