使用 TFDConnection 的 pooled 连接池
从开始看到这个属性,就一直认为他可以提供一个连接池管理功能, 苦于文档资料太少, 甚至在帮助中对该属性的使用都没有任何介绍,如果你搜索百度,也会发现基本没资料。
最后终于在其官方网站看到了其完整相关的英文资料,虽然没有正面介绍该属性,但却是要启用该属性的详细方法:
Defining Connection (FireDAC)
A connection definition is a set of parameters that defines how to connect an application to a DBMS using a specific FireDAC driver. It is the equivalent of a BDE alias, ADO UDL (stored OLEDB connection string), or ODBC Data Source Name (DSN). For the list of supported database management systems and corresponding parameters, see FireDAC Database Connectivity.
FireDAC supports 3 connection definition kinds:
Type | Description | Pros | Cons |
---|---|---|---|
Persistent | Has a unique name, is managed by the FDManager, and is stored in a connection definition file. | May be defined once and reused across many applications. May be pooled. | The parameters (server address, DB name, and so on) are publicly visible and may be changed incidentally.
FDManager has to be reactivated or the Delphi IDE has to be restarted to make a newly added definition visible at design time. |
Private | Has a unique name, is managed by the FDManager, but is NOT stored in a connection definition file. | Connection definition parameters are not visible "outside" the application. May be pooled. | The application needs to create a private connection definition after each program restarts and cannot share it with the other programs.
Cannot be created at design time. |
Temporary | Has no name, is not stored in a connection definition file, and is not managed by the FDManager. | The simplest way to create a connection definition is to fill in the TFDConnection.Params property.
Can be created at design time using the TFDConnection component editor. |
Similar to private. Also cannot be referenced by name and cannot be pooled. |
Connection Definition File
The persistent connection definitions are stored in an external file - the connection definition file. This file has the standard INI text file format. It can be edited by FDExplorer or FDAdministrator utilities at first, manually, or by code. By default the file is C:\Users\Public\Documents\Embarcadero\Studio\14.0\FireDAC\FDConnectionDefs.ini
.
Note: If you add a new persistent connection definition using FDExplorer or FDAdministrator while the RAD Studio IDE is running, it is not visible to the FireDAC design time code. To refresh the persistent connection definitions list, you need to reactivate FDManager or restart the RAD Studio IDE.
Sample content of this file:
[Oracle_Demo]
DriverID=Ora
Database=ORA_920_APP
User_Name=ADDemo
Password=a
MetaDefSchema=ADDemo
;MonitorBy=Remote
[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
MonitorBy=Remote
An application can specify a connection definition file name in the FDManager.ConnectionDefFileName property. FireDAC searches for a connection definition file in the following places:
- If ConnectionDefFileName is specified:
- search for a file name without a path, then look for it in an application EXE folder.
- otherwise just use a specified file name.
- If ConnectionDefFileName is not specified:
- Look for FDConnectionDefs.ini in an application EXE folder.
- If the file above is not found, look for a file specified in the registry key HKCU\Software\Embarcadero\FireDAC\ConnectionDefFile. By default it is
C:\Users\Public\Documents\Embarcadero\Studio\14.0\FireDAC\FDConnectionDefs.ini
.
Note: At design time, FireDAC ignores the value of the FDManager.ConnectionDefFileName, and looks for a file in a RAD Studio Bin folder or as specified in the registry. If the file is not found, an exception is raised.
If FDManager.ConnectionDefFileAutoLoad is True, a connection definition file loads automatically. Otherwise, it must be loaded explicitly by calling the FDManager.LoadConnectionDefFile method before the first usage of the connection definitions. For example, before setting TFDConnection.Connected to True.
Creating a Persistent Connection Definition
A persistent connection definition can be created using FDExplorer or FDAdministrator. Here is how you can do that in code. Also see the demo FireDAC\Samples\Comp Layer\TFDConnection\ConnectionDefs.
The following code snippet creates a connection definition named "MSSQL_Connection", which has all parameters required to connect to the Microsoft SQL Server running locally, using the OS authentication (SSPI):
uses
FireDAC.Comp.Client, FireDAC.Stan.Intf;
var
oDef: IFDStanConnectionDef;
begin
oDef := FDManager.ConnectionDefs.AddConnectionDef;
oDef.Name := 'MSSQL_Connection';
oDef.DriverID := 'MSSQL';
oDef.Server := '127.0.0.1';
oDef.Database := 'Northwind';
oDef.OSAuthent := True;
oDef.MarkPersistent;
oDef.Apply;
.....................
FDConnection1.ConnectionDefName := 'MSSQL_Connection';
FDConnection1.Connected := True;
FDManager is a global instance of the FireDAC connection manager. Its property FDManager.ConnectionDefs: IFDStanConnectionDefs is a collection of the persistent and private connection definitions. The AddConnectionDef method adds a new connection definition. The MarkPersistent method marks a connection definition as persistent. The Apply method saves a connection definition to a connection definition file. Without the MarkPersistent call, the connection definition is private.
Creating a Private Connection Definition
A private connection definition can be created only in code. The code is similar to the one above, but without the MarkPersistent call.
Also, you can use a technique similar to BDE:
var
oParams: TStrings;
begin
oParams := TStringList.Create;
oParams.Add('Server=127.0.0.1');
oParams.Add('Database=Northwind');
oParams.Add('OSAuthent=Yes');
FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
.....................
FDConnection1.ConnectionDefName := 'MSSQL_Connection';
FDConnection1.Connected := True;
Creating a Temporary Connection Definition
A temporary connection definition can be created at design time using the FireDAC Connection Editor. In order to do this, double-click a TFDConnection to invoke the editor:
Or at run time in code by filling the TFDConnection.Params property. This is the simplest way to create a connection definition.
FDConnection1.DriverName := 'MSSQL';
FDConnection1.Params.Add('Server=127.0.0.1');
FDConnection1.Params.Add('Database=Northwind');
FDConnection1.Params.Add('User_name=sa');
FDConnection1.Connected := True;
Another option is to specify a connection string at run time by filling the TFDConnection.ConnectionString property. A connection string may be a convenient way to specify connection definition parameters for certain types of applications. For example:
FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';
FDConnection1.Connected := True;
Editing a Connection Definition
An application may need an ability to create and edit a connection definition at run time using standard FireDAC Connection Editor dialog. To edit a temporary connection definition stored in TFDConnection, use the code:
uses
FireDAC.VCLUI.ConnEdit;
...
if TfrmFDGUIxFormsConnEdit.Execute(FDConnection1, '') then
FDConnection1.Connected := True;
To edit a connection definition represented as a FireDAC connection string, use the code:
uses
FireDAC.VCLUI.ConnEdit;
...
var
sConnStr: String;
...
sConnStr := FDConnection1.ResultConnectionDef.BuildString();
if TfrmFDGUIxFormsConnEdit.Execute(sConnStr, '') then begin
FDConnection1.ResultConnectionDef.ParseString(sConnStr);
FDConnection1.Connected := True;
end;
使用 TFDConnection 的 pooled 连接池的更多相关文章
- Jar程序使用MyBatis集成阿里巴巴druid连接池
在写jar程序,而不是web程序的时候,使用mybatis作为持久层,可以集成POOLED连接池,而阿里的druid不能用,确实很郁闷.不过有办法. 首先准备好数据库配置文件 然后对Druid进行一个 ...
- Mybatis连接池及事务
一:Mybatis连接池 我们在学习WEB技术的时候肯定接触过许多连接池,比如C3P0.dbcp.druid,但是我们今天说的mybatis中也有连接池技术,可是它采用的是自己内部实现了一个连接池技术 ...
- FIREDAC FDConnection 连接池 连接串
一.FDConnection 连接池 http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic ...
- 三句话搞定FireDAC连接池
form上拖入: FDManager1: TFDManager; FDConnection1: TFDConnection; //初始化连接池procedure TForm1.InitDBPool;b ...
- Delphi XE FireDac 连接池
在开发Datasnap三层中,使用FireDac 连接 MSSQL数据库. 实现过程如下: 1.在ServerMethods 单元中放入 FDManager.FDPhysMSSQLDriverLin ...
- Redis 连接池的问题
目录 Redis 连接池的问题 1 1. 前言 1 2.解决方法 1 前言 问题描述:Redis跑了一段时间之后,出现了以下异常. Redis Timeout ex ...
- 连接池和 "Timeout expired"异常
转自:博客园宁静.致远:http://www.cnblogs.com/zhangzhu/archive/2013/10/10/3361197.html 异常信息: MySql.Data.MySqlCl ...
- 连接池和 "Timeout expired"异常【转】
异常信息: MySql.Data.MySqlClient.MySqlException (0x80004005): error connecting: Timeout expired. The tim ...
- oracle database resident connection pooling(驻留连接池)
oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...
随机推荐
- Apple Demo
https://developer.apple.com/library/ios/navigation/ http://developer.apple.com/library/ios/samplecod ...
- LeetCode Search a 2D Matrix II
原题链接在这里:https://leetcode.com/problems/search-a-2d-matrix-ii/ Write an efficient algorithm that searc ...
- box_shadow
.tip{width:485px; height:260px; position:absolute;top:10%; left:30%;background:#fcfdfd; box-shadow:1 ...
- 利用utl_file来读取文件.
以前写过用external table来加载trace文件,详情参考下面链接. http://www.cnblogs.com/princessd8251/p/3779145.html 今天要做到是用U ...
- 详解MySQL---DDL语句、DML语句与DCL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- 为什么玩VR眼镜会头晕?
为什么玩VR眼镜会头晕?看完本文你就懂了 很多用户都体验过各式各样的VR眼镜或者说头盔,但是不管哪一款,都很容易出现头晕的情况.相信大家都纳闷过,为什么玩VR眼镜会头晕?实际上这是和设备本身的技术 ...
- Android如何使用so文件和Android studio中导入so
Android中使用so文件: 做一个PDF阅读的功能,找到一个开源的库,mupdf.下载的是网上编译好的so库,导入到自己项目中的时候一直报错Java.lang.UnsatisfiedLinkErr ...
- 淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道
时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信.金融等行业,几乎已经到了“数据就是业务本身”的地步.这种趋势已经让很多相信数据之力量的企业做出改变.恰逢此时,为了让更多的 ...
- 奥威power-BI 在线体验平台
奥威Power-BI比你想象的更简单!完全可视化绿色开发平台.奥威Power-BI在线体验平台,欢迎大家体验,了解更多产品知识.奥威Power-BI为您达成信息化最后一公里!在线体验网址:http:/ ...
- Java 多线程Thread和Runnable
Thread: class MyThread extends Thread { private int ticketsCont=5; //一共有5张火车票 private String name; / ...