使用数据库连接池

E2EE内置ADO作为通用数据库解决方案。

  1. 创建连接池
  2. 操作数据库
  3. 数据库和对象映射
  4. 使用数据库分页

使用数据库连接池和操作数据库主要有三个对象:

1. 创建连接池

创建数据库连接池的原型:

ADODB数据库连接池.创建() : 逻辑型

示例:

数据库连接池.创建 (留言本服务器, “Driver=SQLite3 ODBC Driver;Database=c:/网站/数据库.db”, "SQLite", , )

“连接字符串”和“数据库类型名称”通常是放在配置里的,配置文件支持定义路径,这样解决路径自动定位问题,同时更加灵活。

常用数据库连接字符串

[SQLite]

Driver=SQLite3 ODBC Driver;Database={{> /数据库.db }}

[MySQL5.3] 需要设置用户名和密码。[DataBase] 参数为数据库名称

Driver={MySQL ODBC 5.3 UNICODE Driver}; DataBase=test; Server=127.0.0.1; Port=3306; option=3; Charset=gbk;

SQLite 和 MySQL 时建议[是否UNICODE]参数设置为真。如果有可能有多编码时可以不用设置为真,而是在映射和执行SQL的参数中遇到UNICODE字段手动设置类型为“宽文本型”。

2. 操作数据库

操作数据库的核心对象是“ADODB数据库连接”。

2.1 获取数据库连接

获取数据库连接:

数据库连接 = 数据库连接池.取连接()

2.2 查询

查询数据 并返回为 存取列表:

数据库连接.查询([SQL], [最大记录数])

[最大记录数] 限定最多返回多少行数据。

查询第一条数据 并返回为 存取键值对:

数据库连接.查询头条([SQL])

2.3 执行

数据库连接.执行([SQL])

返回SQL是否执行成功,主要针对CREATE, UPDATE和DELETE等更新语句。

2.4 事务

数据库连接对象是抽象连接对象,不保留真实连接,只有执行事物时才绑定到真实连接,所以使用事务请务必保证 开启事务() 执行完数据库操作后务必调用 提交/回滚事务()。

开启事务(返回是否成功):

数据库连接.开启事务()

提交事务(返回是否成功):

数据库连接.提交事务()

当您操作完数据库之后,确定提交的数据都没有问题时,请务必做事务的提交。

开启事务(返回是否成功):

数据库连接.回滚事务()

当您在保存数据过程中,执行相关的保存逻辑出现问题,可以调用 回滚事务 撤销从开启事务开始的所有数据库更新操作。

3. 数据库和对象映射

3.1 查询数据库到自定义数据

映射到自定义数据时,需要查询所有关联表的数据,沿用上一章的数据定义。

用户: user

    ID:         整数型 << user_id << [ID]
    名称:     文本型 << user_name
    性别:     文本型 << user_sex
    年龄:     整数型 << user_age
    身高:     长整数型 << user_hight
    扩展数据:   用户扩展信息 << ID

用户扩展信息: user_ext

    ID:         整数型 << user_id << [ID]
    头像:     文本型 << user_avatar
    描述:     文本型 << user_explain
    网址:     文本型 << user_web
    邮箱:     文本型 << user_email
    电话:     文本型 << user_phone

假设这两张表示通过 user_id 进行一对一关联的,则对应的查询语句:

SELECT * FROM user AS u LEFT JOIN user_ext AS ue ON ue.user_id = u.user_id

最终返回的数据展开文本类似下面这样:

[
   ...
   {
      "user_age" : 31,
      "user_avatar" : "/大西瓜.jpg",
      "user_email" : "boychong2@126.com",
      "user_explain" : "这个家伙很懒,什么都没有留下~",
      "user_hight" : 172,
      "user_id" : 88,
      "user_name" : "JimStone",
      "user_phone" : "15221861111",
      "user_sex" : "女",
      "user_web" : "www.jimstone.com.cn"
   },
   {
      "user_age" : 32,
      "user_avatar" : "/大西瓜.jpg",
      "user_email" : "boychong@126.com",
      "user_explain" : "这个家伙很懒,什么都没有留下~",
      "user_hight" : 173,
      "user_id" : 89,
      "user_name" : "JimStone",
      "user_phone" : "15221862222",
      "user_sex" : "女",
      "user_web" : "www.jimstone.com.cn"
   },
   ...
]

字段名跟配置的名称都能对应起来,则映射的信息才能准确的填充到自定义对象中。允许查询到的字段有缺失,譬如返回结果不包含“user_id”,那么生成的自定义数据对应的属性则会为空值。


查询数据到自定义数据时,流程、参数和查询数据的方式一样,唯一不同的是加入了映射信息和传递自定义数据变量。

查询到自定义数组:

.版本 2
.局部变量 用户列表, 用户, , "0"

数据库连接.查询到自定义数组 (“SELECT * FROM user AS u LEFT JOIN user_ext AS ue ON ue.user_id = u.user_id”, , “用户”, 用户列表)

查询第一条到自定义数据变量:

.版本 2
.局部变量 用户信息, 用户, , 

数据库连接.查询头条到自定义 (“SELECT * FROM user AS u LEFT JOIN user_ext AS ue ON ue.user_id = u.user_id WHERE u.user_id = 1”, “用户”, 用户信息)

4. 使用数据库分页

使用数据库连接执行查询到分页方法能够返回分页对象。

数据库连接.查询到分页() : ADODB数据库分页

分页对象不是所有的数据库驱动都支持使用游标查询,所以针对不支持游标的数据库,建议手动编写 取数量SQL 参数,以减少分页对象在获取数据记录数量时的效率损耗。

分页对象会保留连接,所以建议取到数据后,执行 关闭() 方法。

ADODB数据库分页

ADO数据库分页对象。本对象复制无效。注意:如果后续逻辑复杂,请在取到所有需要的数据后执行关闭()命令释放资源再处理您接下来的业务逻辑。

取数量() : 整数型

获取全部查询到的数据的总数。

取分页总数() : 整数型

获取总分页数。

取分页大小() : 整数型

获取每页数据的条数。

取分页数据() : 存取列表

取指定页的数据,返回分页数据列表。

取分页数据到数组() : 整数型

取指定页的数据并转换到指定类型的自定义数据数组,返回数据条数。

取分页数据到模板格式() : 整数型

取指定页的数据,返回分页数据列表,并且自动组装成统一的模板用数据格式。

关闭() : 逻辑型

关闭当前分页对象,关闭后会自动释放所有相关资源。