理解MHS(3):数据库-数据库连接
数据库连接:
数据库连接是在config.ini中配置的,一旦配置则不能随意更改,更改后则需要重启MHS才能应用更改。正常的配置像这样:
[Database0]
Name=Default
Connection=Provider Name=SQLite;Database=.\dbdemos.db3;Login Prompt=False;Direct=True
MaxPoolSize=1
一、配置说明
这里面有三个值,需要特别说明:
1.Name,很关键,当有多个数据库连接时,根据该字符串进行查找需要的数据库连接。
2.Connection,连接字符串,更多解释请参考QA.txt中的说明。
3.MaxPoolSize,最大连接数,因为MHS内置了数据库连接池,所以该值直接影响着执行性能,一般情况下8个连接足够使用,也可以根据自己需要进行修改,当然,对于文本型数据库(Access和Sqlite),该值无用。
二、多个数据库
当需要多个数据库连接时,您可以这样定义更多的数据库连接,注意段名称的变化:
[Database1]
Name=DB1
.....[Database2]
Name=DB2
.....
三、数据库高级功能
1.事务能力
我们知道数据库连接可以对事务进行操作,这也是非常关键的内容,为了保持数据库连接的纯洁性和开发的方便性,该功能被赋予给了TwmQuery,因此,正常的事务操作类似下面内容(该内容来自于Lessons\Lesson9内容,请自行参考):
function TestTransaction: Boolean;
var
AQuery: TWmQuery;
begin
AQuery := wm.NewQuery('');
try
AQuery.StartTransaction;
try
AQuery.SQL.Text := 'Update employee Set Salary=Salary + 100';
AQuery.Execute;
if AQuery.InTransaction then
begin
AQuery.Commit;
Result := True;
end;
except
on E: Exception do
begin
AQuery.Rollback;
end;
end;
finally
FreeAndNil(AQuery);
end;
end;
也就是说,每个TWmQuery都可以开启和终止当前的事务,这种控制非常方便也非常灵活,因此请根据需要自行控制。
2.指定数据库连接
如上代码:
AQuery := wm.NewQuery('');
wm.NewQuery方法接受两个参数,第一个参数为AQuery的名字,默认为空,第二个参数为数据库名称,默认为空(即使用config.ini中的首个数据库配置),当指定第二个参数时则使用指定的数据库,例如:
AQuery := wm.NewQuery('', 'DB1');
该代码使用config.ini中数据库配置Name=DB1的数据库连接。有关该部分内容,请参考TwmQuery的描述。
这样就可以在同一个应用中使用多个具有连接池功能的数据库。
3.获取数据库中的所有表名称
AQuery.GetTableList;
返回值为字符串,该字符串以回车换行分割。
四、支持的数据库
只支持四种数据库,链接字符串如下所示:注意,此处只是示例,示例!!!
4.1 Access:
[Database0]
Name=Default
Connection=Provider Name=Access;Database=.\dbdemos.mdb;Login Prompt=False
MaxPoolSize=14.2 Sqlite,must use Direct=True to avoid memory leak.
[Database0]
Name=Default
Connection=Provider Name=SQLite;Database=.\dbdemos.db3;Login Prompt=False;Direct=True;Use Unicode=True
MaxPoolSize=14.3 SQL Server
[Database0]
Name=BBS
Connection=Provider Name=SQL Server;Data Source=.;Initial Catalog=td_blog;Port=8829;User ID=sa;Password=admin;Login Prompt=False
MaxPoolSize=324.4 MySQL
[Database0]
Name=Test
Connection=Provider Name=MySQL;User ID=root;Password=;Data Source=localhost;Database=test;Port=3306;Login Prompt=False
MaxPoolSize=32
=================
有关本节详细内容可以参考Lessons\Lesson9\index.pp中的内容。
0 Comments