FireDAC 下的 Sqlite [4] - 创建数据库
建立数据库的代码:
{建立内存数据库的一般代码:}
begin
FDConnection1.DriverName := 'SQLite'; //同 FDConnection1.Params.Add('DriverID=SQLite');
// FDConnection1.Params.Add('Database=:memory:'); //可省略这行, FireDAC 的源码显示, if Database = '' then Database := ':memory:';
// FDConnection1.Params.Add('SQLiteAdvanced=page_size=4096'); //可指定内存页大小, 这是默认值
FDConnection1.Connected := True;
end
{建立文件数据库的一般代码:}
begin
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Params.Add('Database=C:\Temp\New1.sdb'); //如果文件存在就打开, 不存在就建立
// FDConnection1.Params.Add('SQLiteAdvanced=temp_store=Memory'); //可强制临时文件在内存以提高效率. 0:DEFAULT; 1:FILE; 2:MEMORY
// FDConnection1.Params.Add('SQLiteAdvanced=temp_store_directory=C:\Temp'); //默认的临时文件路径应该是 C:\Documents and Settings\user-name\Local Settings\Temp\
// FDConnection1.Params.Add('OpenMode=CreateUTF8'); //默认是 CreateUTF8, 也可选择 CreateUTF16
// FDConnection1.Params.Add('LockingMode=Normal'); //默认是多用户模式, 如果使用独占模式 LockingMod=Exclusive 会更有效率
FDConnection1.Connected := True;
end;
所有建立参数参见: http://www.sqlite.org/pragma.html
先在空白窗体上添加: TFDConnection、TFDPhysSQLiteDriverLink、TFDGUIxWaitCursor; 数据库的建立主要通过 TFDConnection 完成.
同时添加用于呈现数据的 TFDQuery、TDataSource、TDBGrid, 还要添加一个 TFDCommand 用于提交建表命令, 然后调整如下属性:
FDQuery1 . Connection = FDConnection1
DataSource1 . DataSet = FDQuery1
DBGrid1 . DataSource = DataSource1
FDCommand1 . Connection = FDConnection1
你可以复制下面文本框中的内容, 然后直接往窗体上贴, 以快速完成以上的添加过程:
object FDConnection1: TFDConnection
Left = 34
Top = 24
end
object FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink
Left = 143
Top = 24
end
object FDGUIxWaitCursor1: TFDGUIxWaitCursor
Provider = 'Forms'
Left = 260
Top = 24
end
object FDQuery1: TFDQuery
Connection = FDConnection1
Left = 32
Top = 80
end
object DataSource1: TDataSource
DataSet = FDQuery1
Left = 148
Top = 80
end
object FDCommand1: TFDCommand
Connection = FDConnection1
Left = 264
Top = 88
end
object DBGrid1: TDBGrid
Left = 24
Top = 144
Width = 409
Height = 137
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
测试代码:
procedure TForm1.FormCreate(Sender: TObject);
const
dbPath = 'C:\Temp\SQLiteTest.sdb';
begin
if FileExists(dbPath) then DeleteFile(dbPath); with FDConnection1 do begin
Params.Add('DriverID=SQLite');
Params.Add('Database=' + dbPath);
Connected := True;
end; {创建一个名为 MyTable 的表, 字段包括: ID, Name, Age, Note, Picture}
with FDCommand1.CommandText do begin
Add('CREATE TABLE MyTable(');
Add('ID integer PRIMARY KEY,'); //Integer 类型, 同时设为主键
Add('Name string(10),'); //能容下 10 个字符的 String 类型
Add('Age byte,'); //Byte 类型
Add('Note text,'); //Memo 类型
Add('Picture blob'); //Blob(二进制)类型
Add(')');
end;
FDCommand1.Active := True; {查看表}
FDQuery1.Open('SELECT * FROM MyTable');
end;
效果图:

直接使用 TFDConnection 提交 DDL 命令更简单:
procedure TForm1.FormCreate(Sender: TObject);
const
dbPath = 'C:\Temp\SQLiteTest.sdb';
begin
if FileExists(dbPath) then DeleteFile(dbPath); with FDConnection1 do begin
Params.Add('DriverID=SQLite');
Params.Add('Database=' + dbPath);
Connected := True;
end; {创建一个名为 MyTable 的表, 字段包括: ID, Name, Age, Note, Picture}
FDConnection1.ExecSQL('CREATE TABLE MyTable(ID integer PRIMARY KEY, Name string(10), Age byte, Note text, Picture blob)'); {查看表}
FDQuery1.Open('SELECT * FROM MyTable');
end;
使用 SQLite 底层包装完成的建表提交(这样应该更有效率):
uses FireDAC.Phys.SQLiteWrapper; //为使用 TSQLiteStatement
{使用 TSQLiteStatement 完成的提交 SQL 命令的函数}
procedure MyExecSQL(ACon: TFDConnection; const ASQL: String);
begin
with TSQLiteStatement.Create(ACon.CliObj) do
try
Prepare(ASQL);
Execute;
while PrepareNextCommand do Execute;
finally
Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
const
dbPath = 'C:\Temp\SQLiteTest.sdb';
begin
if FileExists(dbPath) then DeleteFile(dbPath);
with FDConnection1 do begin
Params.Add('DriverID=SQLite');
Params.Add('Database=' + dbPath);
Connected := True;
end;
{创建一个名为 MyTable 的表, 字段包括: ID, Name, Age, Note, Picture}
MyExecSQL(FDConnection1, 'CREATE TABLE MyTable(ID integer PRIMARY KEY, Name string(10), Age byte, Note text, Picture blob)');
{查看表}
FDQuery1.Open('SELECT * FROM MyTable');
end;
关于数据类型, SQLite 本身只支持(Null, Integer, Real, Text, Blob), 但我们可以放心使用 Delphi 的大多数类型(也包括 Delphi 没有的), 因为 FireDAC 幕后做了转换工作.
SQLite 到 FireDAC 数据类型映射表: (http://docwiki.embarcadero.com/RADStudio/XE6/en/Using_SQLite_with_FireDAC)
| Type name | Description |
|---|---|
| rowid | _rowid_ | oid | dtInt64, Attrs = [caSearchable, caAllowNull, caROWID] |
| bit | bool | boolean | logical | yesno | dtBoolean |
| tinyint | shortint | int8 [unsigned] | dtSByte / dtByte |
| byte | uint8 | dtByte |
| smallint | int16 [unsigned] | dtInt16 / dtUInt16 |
| word | uint16 | year | dtUInt16 |
| mediumint | integer | int | int32 [unsigned] | dtInt32 / dtUInt32 |
| longword | uint32 | dtUInt32 |
| bigint | int64 | counter | autoincrement | identity [unsigned] | dtInt64 / dtUInt64 |
| longlongword | uint64 | dtUInt64 |
| real | float | double | dtDouble |
| single [precision] [(p, s)] | dtSingle / dtBCD / dtFmtBCD |
| decimal | dec | numeric | number [unsigned] [(p, s)] | dtSByte / dtInt16 / dtInt32 / dtInt64 dtByte / dtUInt16 / dtUInt32 / dtUInt64 dtBCD / dtFmtBCD |
| money | smallmoney | currency | financial [(p, s)] | dtCurrency |
| date | smalldate | dtDate |
| datetime | smalldatetime | dtDateTime |
| timestamp | dtDateTimeStamp |
| time | dtTime |
| char | character [(l)] | dtAnsiString, Len = L, Attrs = [caFixedLen] |
| varchar | varchar2 | tynitext | character varying | char varying [(l)] | dtAnsiString, Len = L |
| nchar | national char | national character [(l)] | dtWideString, Len = L, Attrs = [caFixedLen] |
| nvarchar | nvarchar2 | national char varying | string [(l)] | dtWideString, Len = L |
| raw | tyniblob | varbinary | binary | binary varying [(l)] | dtByteString, Len = L |
| blob | mediumblob | image | longblob | long binary | long raw | longvarbinary | general | oleobject | tinyblob | dtBlob |
| mediumtext | longtext | clob | memo | note | long | long text | longchar | longvarchar | tinytext | dtMemo |
| text | ntext | wtext | nclob | nmemo | long ntext | long wtext | national text | longwchar | longwvarchar | html | dtWideMemo |
| xmldata | xmltype | xml | dtXML |
| guid | uniqueidentifier | dtGUID |
| other data types | dtWideString |
FireDAC 下的 Sqlite [4] - 创建数据库的更多相关文章
- FireDAC 下的 Sqlite [3] - 获取数据库的基本信息
在空白窗体上添加: TFDConnection, TFDPhysSQLiteDriverLink, TFDGUIxWaitCursor, TMemo procedure TForm1.FormCrea ...
- NetCore2.0下使用EF CodeFirst创建数据库
本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目 取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 ...
- FireDAC 下的 Sqlite [6] - 加密
主要就是设置 TFDConnection 的两个链接参数: Password, NewPassword, 非常简单. const dbPath = 'C:\Temp\SQLiteTest.sdb'; ...
- 【转】 iOS学习之sqlite的创建数据库,表,插入查看数据
原文: http://blog.csdn.net/totogo2010/article/details/7702207 iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsql ...
- FireDAC 下的 Sqlite [2] - 第一个例子
为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...
- FireDAC 下的 Sqlite [1] - 前言
很长时间没静下心来写博客了, 现在回来, 是 Delphi 不断地进步让我感动.振奋. Delphi XE5 并入了 FireDAC, 第一印象非常好, 恐怕 dbExpress 等等都要靠边站了. ...
- iOS学习之sqlite的创建数据库,表,插入查看数据
目录(?)[-] 新建项目sqliteDemo添加使用sqlite的库libsqlite3dylib sqlite 的方法 获取沙盒目录并创建或打开数据库 创建数据表 插入数据 查询数据库并打印数据 ...
- ios sqlite的创建数据库,表,插入查看数据
iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...
- FireDAC 下的 Sqlite [10] - 使用 R-Tree 搜索
R-Tree 主要用于三维空间的搜索, 据说这种搜索算法非常之快, 哪怕百万条记录也是眨眼间的事! SQLite 支持 1-5 维, FireDAC 也提供了 TFDSQLiteRTree 控件以方便 ...
随机推荐
- Linux学习6-套接字
套接字 1.什么是套接字? 套接字(socket)是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 2.套接字应用程序是如何通过套接字来维持一个连接的 ...
- 第11月第8天 ffmpeg ffplay
static int ffplay_video_thread(void *arg) { FFPlayer *ffp = arg; VideoState *is = ffp->is; AVFram ...
- os_cpu_a.asm
在OS_CPU_A.ASM中,定义了开.关中断的方法,在uC/OS-II系统中有三种方法可以实现中断开关,而ARM只适用于模式三,即使用一个局部变量,在中断进入之间保存CPU状态,退出时候再恢复状态. ...
- SqlMapConfig.xml全局配置文件介绍——(四)
----------mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:----------- properties(属性) settings(全局配置参数) typeAlia ...
- 查看IP以及连接数
AWK: time awk 'BEGIN{while("netstat -an"|getline){if( $5 ~ /[1-255]/){split($5,t1,":& ...
- 如何提升mysql replication的性能&多线程传输二进制日志
1,最好使用内网或者专线链路传输binlog数据 (千兆网卡.还不够的话,bounding 技术,扩展带宽) 在my.cnf中强制使用内网ip传输数据bind-address=ip2,将二进制保存在独 ...
- 013_Mac OS X下应该如何卸载软件和安装应用软件
一.Mac OS X下应该如何卸载软件 Mac OS X的软件安装方式有很多种,而软件卸载的情况也很不同.在Mac OS X拆除软件往往不是把软件拉到废止篓里那么简单.通常情况下要具体问题具体分析.无 ...
- 解决win10 关键错误开始菜单和cortana无法工作 的问题
问题描述: 一次强制关机后出现了这个对话框,注销.重启均无法解决问题 解决过程[因为我用的英文版操作系统,所以截图都是英文,请大家自行对照自己的操作系统]: 1.ctrl+alt+del 打开任务管理 ...
- NOIP2018 货币系统
题面 思路 先分析一下,a集合的子集肯定不存在可以用它来表示的数,a集合是不能够表示的. 所以问题简化了成为选出a的一个子集(个数最少),能够表达a集合所有能表达的数. 接下来继续分析 如:1 2 4 ...
- centos 监控进程,并自动重启
编辑Crontab crontab -e 按i进行编辑 */ * * * * /root/monitor.sh # 每分钟运行一遍monitor.sh脚本 * * * /sbin/reboot # 每 ...