FireDAC 下的 Sqlite [4] - 创建数据库
为什么80%的码农都做不了架构师?>>>
建立数据库的代码:
{建立内存数据库的一般代码:}
beginFDConnection1.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{建立文件数据库的一般代码:}
beginFDConnection1.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);
constdbPath = 'C:\Temp\SQLiteTest.sdb';
beginif FileExists(dbPath) then DeleteFile(dbPath);with FDConnection1 do beginParams.Add('DriverID=SQLite');Params.Add('Database=' + dbPath);Connected := True;end;{创建一个名为 MyTable 的表, 字段包括: ID, Name, Age, Note, Picture}with FDCommand1.CommandText do beginAdd('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);
constdbPath = 'C:\Temp\SQLiteTest.sdb';
beginif FileExists(dbPath) then DeleteFile(dbPath);with FDConnection1 do beginParams.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);
beginwith TSQLiteStatement.Create(ACon.CliObj) dotryPrepare(ASQL);Execute;while PrepareNextCommand do Execute;finallyFree;end;
end;procedure TForm1.FormCreate(Sender: TObject);
constdbPath = 'C:\Temp\SQLiteTest.sdb';
beginif FileExists(dbPath) then DeleteFile(dbPath);with FDConnection1 do beginParams.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 |
转载于:https://my.oschina.net/hermer/blog/319362
FireDAC 下的 Sqlite [4] - 创建数据库相关推荐
- RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库
我最近从AnyDac改为FireDac(8.0.5.3365).我们正在运行Delphi 2006. 当我使用此组件的AnyDac版本时,我可以通过执行以下操作来创建新数据库. 设置我的连接 fCon ...
- centos中用MySQL创建新表_CentOS下使用Shell批量创建数据库表
本文继续探索关于Shell和MySQL的结合使用,我不知道当一个数据库设计完成之后如何快速的创建设计好的数据库表和添加相应基本数据,我目前知道的就是使用Shell和SQL脚本来达到我的目的--快速的. ...
- Mac下终端登录mysql创建数据库修改字集
1,启动mysql服务,登录mysql mysql.server start mysql -u root -p 2, (1)在客户端输入help或者\h,查看MySQL帮助菜单,仔细阅读帮助菜单的 ...
- sqlite如何创建数据库
1.cmd,然后sqlite3 test.db,即可创建test.db数据库. 2..databases,即可看这个数据库在哪个路径下. 3.wget.quit可以退出数据库,譬如:sqlite> ...
- FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)
用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin ...
- Linux RH5平台下使用Oracle ASM创建数据库
一.安装配置先决条件 1.安装oracleasm支持包 创建asm数据库,首先需要ASMLib驱动程序包,可以从相关的网站下载到和操作系统对应的rpm文件,分别为oracleasm-support-2 ...
- IOS应用之二--sqlite的创建数据库,表,插入查看数据
转自:http://blog.csdn.net/totogo2010/article/details/7702207 转载于:https://www.cnblogs.com/jwblogmj/p/42 ...
- Android studio 关于SQlite数据库导出,创建数据库、表以及如何查看操作
1.首先,你要确定你的模拟器或手机已经Root,若没有,在你的android SDK的platform-tools目录下打开shell命令行· 如,我的是:C:\Users\10378\AppData ...
- SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)
SQLite 创建数据库 SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库.您不需要任何特殊的权限即可创建一个数据. 语法 sqlite3 命令的基本语法如下: $sqlit ...
最新文章
- 多媒体计算机技术在教学中的应用,【浅谈多媒体计算机技术在中学物理教学中的应用】计算机技术是什么...
- mongodb 查询 mysql_MongoDB 基本查询使用
- Python之 sklearn:sklearn.preprocessing中的StandardScaler函数的简介及使用方法之详细攻略
- 一探即将到来的 C# 10
- .Net Core + 微信赋能企业级智能客服系统--学习笔记
- 来华30载,这些都是Oracle的神来之笔……
- 【JEECG示例文档】使用Kettle从mysql向oracle中抽取数据
- linux vi脚本,linux下vi(vim)的新的用法总结
- 如何不用BPM配置时间
- c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
- 昨天食物中毒,至今浑身酸痛
- Nginx常用使用解读及配置
- echarter: ECharts的R语言接口(一)
- PHP逆波兰表达式的算法
- 联想g500网卡linux驱动,联想g500无线网卡驱动下载-lenovog500无线网卡驱动v10.0.0.225 官方版 - 极光下载站...
- 青岛科技大学计算机硕士就业,2021年青岛科技大学专业排行榜,哪个专业就业比较好...
- 算法复习-Akari Puzzle
- 微信小程序-001-抽签功能-006-我的抽签-主界面
- 工具类(Excel)[一]
- 中止执行后超过2年_执行中止。债权人是否两年内都要申请执行一次。如果中止执行两年内不申请执行,是否都再也执行不了...
热门文章
- Crystal For Rubyists 简体中文
- 查看SqlServer的内存使用情况
- 构建具有用户身份认证的 React + Flux 应用程序
- 第四范式陈雨强:万字深析工业界机器学习最新黑科技
- 树莓派/香橙派自建本地DNS加速解析
- Android开发更改应用图标无效的问题
- 轻轻的我走了,正如我轻轻的来…——ADO.NET核心类的灭度与SQLHelper的诞生——十八相送(下)...
- [论文笔记] Fast Quality Driven Selection of Composite Web Services (ECOWS, 2006)
- 归并排序的 Go 语言实现和优化
- html2canvas如何在元素隐藏的情况下生成截图