一、FDConnection 连接池

http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=Defining_Connection.html

http://docwiki.embarcadero.com/RADStudio/XE8/en/Defining_Connection_%28FireDAC%29

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Multithreading_(FireDAC)

FDManager()->ConnectionDefs->ConnectionDefByName("")

FDManager.ConnectionDefs.ConnectionDefByName(cbDB.Text).Params.Pooled := True

oConn.ConnectionDefName;

FDConnection1->Params->Pooled;

$(FDHOME)\FDConnectionDefs.ini

D:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini

D:\Users\Public\Documents\Embarcadero\Studio\16.0\Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDConnection\Pooling

从这个官方例子看出使用连接池比不使用连接池的效率提高4倍。

http://www.cnblogs.com/zhenfei/p/4105515.html

1)FDConnectionDefs.ini文件

[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
ExtendedMetadata=True

以上代码存为FDConnectionDefs.ini文件放到当前exe目录下,程序会自己找到。小节名称与ConnectionDefByName参数一致。

this->FDManager1->ConnectionDefFileName = "FDConnectionDefs.ini";
this->FDManager1->ConnectionDefs->ConnectionDefByName("MSSQL_Demo")->Params->Pooled = true;

考虑到安全性,密码需要加密,所以建议用方法2或3。

2)代码动态创建IFDStanConnectionDef

  1. uses
  2. FireDAC.Comp.Client, FireDAC.Stan.Intf;
  3. var
  4. oDef: IFDStanConnectionDef;
  5. begin
  6. oDef := FDManager.ConnectionDefs.AddConnectionDef;
  7. oDef.Name := 'MSSQL_Connection';
  8. oDef.DriverID := 'MSSQL';
  9. oDef.Server := '127.0.0.1';
  10. oDef.Database := 'Northwind';
  11. oDef.OSAuthent := True;
  12. oDef.MarkPersistent;
  13. oDef.Apply;
  14. .....................
  15. FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  16. FDConnection1.Connected := True;

3)连接参数

  1. var
  2. oParams: TStrings;
  3. begin
  4. oParams := TStringList.Create;
  5. oParams.Add('Server=127.0.0.1');
  6. oParams.Add('Database=Northwind');
  7. oParams.Add('OSAuthent=Yes');
  8. FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
  9. .....................
  10. FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  11. FDConnection1.Connected := True;
  12.  
  13. c++ FDManager()->AddConnectionDef("", "", para);
    其他
  1. FDManager.ConnectionDefFileName := ExtractFilePath(Application.ExeName) + 'myconndef.ini';
  2. FDManager.ConnectionDefFileAutoLoad := True;
  3. oConn := TFDConnection.Create(nil);
  4. oConn.ConnectionDefName := 'myconn';
  5. oConn.Connected := True;

Create Connection def

  1. void __fastcall TForm35::Button5Click(TObject *Sender)
  2. {
  3. TStrings *para;
  4. para = new TStringList();
  5. para->Add("Server=192.168.1.1");
  6. para->Add("Database=db");
  7. para->Add("User_Name=sa");
  8. para->Add("Password=123");
  9.  
  10. FDManager()->AddConnectionDef("sqlPTT", "MSSQL", para);
  11.  
  12. FDConnection1->ConnectionDefName = "sqlPTT";
  13. Label1->Caption = this->FDConnection1->ResultConnectionDef->BuildString();
  14. delete para;
  15.  
  16. int startTime = GetTickCount();
  17. for (int i = ; i < ; i++)
  18. {
  19. this->Button1->Click();
  20. }
  21. Caption = (GetTickCount() - startTime) / 1000.0;
  22. }

use pool

  1. void __fastcall TForm35::Button1Click(TObject *Sender)
  2. {
  3. TFDConnection *con;
  4. con = new TFDConnection(NULL);
  5. con->ConnectionDefName = FDConnection1->ConnectionDefName;
  6.  
  7. TFDQuery *qry;
  8. qry = new TFDQuery(NULL);
  9. qry->Connection = con;
  10. qry->SQL->Text = "select count(*) from tt";
  11. qry->Open();
  12. con->Close();
  13.  
  14. delete con;
  15. delete qry;
  16.  
  17. }

连接池比普通连接块4倍!

连接字符串ConnectString

mssql带端口号

Server={127.0.0.1,9433};User_Name=sa;;Password=123;Database=dbname;DriverID=MSSQL

Name=Unnamed;Database=mydb;User_Name=sa;Password=123;Server=127.0.0.1;DriverID=MSSQL

  1. FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa;Password=123;';
    Database=car;User_Name=sa;Password=;Server=127.0.0.1,9433;DriverID=MSSQL
  2.  
  3. mysql
    Database=testdata;User_Name=root;Password=root;Server=127.0.0.1;DriverID=MySQL;CharacterSet=utf8
  4.  
  5. sqlite:
    Database=D:\msdb.db;DriverID=SQLite
  6.  
  7. 执行十条sql语句性能比较。
    1、一个连接打开,不关闭,耗时0.184ms
    2、使用连接池,耗时0.265ms
    3、不使用连接池,0.71ms
    oracle连接字符串ip地址输入10.0.0.2:1521/orcl
  8.  
  9.   FDConnection1.Params.DriverID:='SQLite';
      FDConnection1.Params.Database := 'Demo.db';
  10.  
  11. 以前ADO连接
    ADOConstr = PromptDataSource(0, ADOConnection1->ConnectionString);
  12.  
  13. DBF连接串
    Provider = Microsoft.Jet.OLEDB.4.0 ;Data Source ={0};Extended Properties=dBASE IV
  14.  
  15. SQLite连接字符串
    Name=Unnamed;Database=E:\Bin\posdata.sqlite;DriverID=SQLite
    MYSQL连接串
    Name=Unnamed;Database=tData;User_Name=root;Password=root;Server=127.0.0.1;DriverID=MySQL;CharacterSet=utf8;Port=3306
  16.  
  17. ADO连接字符串

Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=mydb;Data Source=127.0.0.1

  1.  
    --ORACLE
    DriverID=Ora
    Database=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) )  (CONNECT_DATA = (SERVICE_NAME = orcl)))
    User_Name=DI_EHR
    Password=neusoft
    AuthMode=Normal
    CharacterSet=UTF8

FIREDAC FDConnection 连接池 连接串的更多相关文章

  1. node 连接MySQL及其分装, 连接池连接

    const mysql = require('mysql') const config = require('./../../config/config.default') var connectio ...

  2. JNDI连接池连接Oracle数据库

    今天做了一个评论的小功能,要求用JNDI连接池连接Oracle数据库,以前只是测试了是否连接的上,现在没想到一个JNDI连接池连接Oracle数据库,纠结了好久,原来都是Oracle数据库的问题,这是 ...

  3. python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  4. spring boot配置druid连接池连接mysql

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. 记录关于使用ADO.NET 连接池连接Oracle时Session信息不更新的坑

    最近的一个项目中,由于界面查询的数据量比较大,关联的表比较多,有些数据查出来需要临时保存起来供后面的查询使用,于是想到了用oracle的临时表来实现这个需求.大家都知道,oracle的临时表有两种:事 ...

  6. Java创建连接池连接不同数据库

    在一个应用里面,可能涉及到连接多个不同数据库进行操作,而每次连接写不同的实现会很麻烦.前面已经会了用JDBC连接数据库,那么利用反射和工厂模式,可以实现连接不同的数据库,这样处理起来将会很方便.同时建 ...

  7. Mybatis 搭配 阿里druid连接池 连接 oracle 或 mysql

    DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...

  8. 使用BasicDataSource连接池连接oracle数据库报错ORA-12505

    先看连接池配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ...

  9. 关于c3p0连接池连接mysql数据库需要注意的几点

    什么是数据库连接池: 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象. 当使用完Co ...

随机推荐

  1. leetcode:Search for a Range(数组,二分查找)

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  2. create-maximum-number(难)

    https://leetcode.com/problems/create-maximum-number/ 这道题目太难了,花了我很多时间.最后还是参考了别人的方法.还少加了个greater方法.很难. ...

  3. [Swift 语法点滴]—— Struct Vs Class

    摘自:stackoverflow.com/questions/24232799/why-choose-struct-over-class Structure instances are always ...

  4. Java Socket 模拟HTTP请求

    public static void main(String[] args) { try { String url = "192.168.1.103"; Socket socket ...

  5. mysql script for dynamic running sql script

    ),startTime datetime,endTime datetime) BEGIN set @s1 = concat('SELECT * FROM ', deviceName , ' where ...

  6. UVA 489 Hangman Judge (字符匹配)

    题意:给一个字符串A,只含小写字符数个.再给一个字符串B,含小写字符数个.规则如下: 1.字符串B从左至右逐个字符遍历,对于每个字符,如果该字符在A中存在,将A中所有该字符删掉,若不存在,则错误次数+ ...

  7. Python 删除 数组

    numpy删除一列 从0开始,第三个参数是第几个维度  可以多删几个 

  8. Mac Maven java_home错误

    当maven装好之后出现 $ mvn -versionError: JAVA_HOME is not defined correctly. We cannot execute /usr/libexec ...

  9. python工厂方式创建list

    >>> l = list('sdfsdf') >>> l ['s', 'd', 'f', 's', 'd', 'f']

  10. RegEx正则表达式学习笔记

    一.实用的例子 public static void main(String[] args) { // 简单练习 System.out.println("-123".matches ...