使用数据库连接池
E2EE内置ADO作为通用数据库解决方案。
使用数据库连接池和操作数据库主要有三个对象:
ADODB数据库连接池
ADODB数据库连接
ADODB数据库分页
1. 创建连接池
创建数据库连接池的原型:
ADODB数据库连接池.创建() : 逻辑型
服务器对象:“网站服务器”。传递服务器对象。统一错误日志等。
连接字符串:“文本型”。ADO的连接字符串。
数据库类型名称:“文本型”,可以被省略。例如:SQLite、MSSQL、MySQL等。
对象映射中心:“对象映射中心”,可以被省略。如果指定了对象映射中心才能执行查询到数据、保存对象和删除等ORM操作。
用户名:连接数据库使用的用户名。
密码:连接数据库使用的密码。
是否UNICODE:如果设置为真时,则所有文本参数都将自动转换为宽字节。用于所有的带参数SQL中的文本,用来确定是否为宽字符集存储(针对UTF8/UNICODE等字符集)。默认:假。
连接初始化SQL:连接创建成功后执行初始化SQL。设置为空文本时则不执行任何SQL。数据库连接创建成功后将自动执行此SQL。
取最后ID的SQL:“文本型”,可以被省略。用在ORM保存对象时使用,不使用ORM保存对象功能可不填写。内置了:SQLite、MSSQL、MySQL 的取ID语句,这些数据库时不用填写。其它类型数据库请自己填写获取最后ID的语句,支持两个转义文本,分别是:“”和“”,使用时可组织类似如下语句:SELECT MAX() FROM 。
示例:
数据库连接池.创建 (留言本服务器, “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语句:“文本型”。查询数据库的SQL语句。
分页大小:“整数型”,可以被省略。获取时每页数据的条数。如果为空或者小于1则默认为30。
取数量SQL语句:“文本型”,可以被省略。数据库驱动中不少类型的数据库游标在ADO中都无法取到实际数量,所以可能需要额外提供取数量的SQL语句。如果ADO使用的数据库驱动不支持取数量时,没有设置当前参数,则对象会自动运算总数,效率会低一些。
分页对象不是所有的数据库驱动都支持使用游标查询,所以针对不支持游标的数据库,建议手动编写 取数量SQL 参数,以减少分页对象在获取数据记录数量时的效率损耗。
分页对象会保留连接,所以建议取到数据后,执行 关闭() 方法。
ADODB数据库分页
ADO数据库分页对象。本对象复制无效。注意:如果后续逻辑复杂,请在取到所有需要的数据后执行关闭()命令释放资源再处理您接下来的业务逻辑。
取数量() : 整数型
获取全部查询到的数据的总数。
取分页总数() : 整数型
获取总分页数。
取分页大小() : 整数型
获取每页数据的条数。
取分页数据() : 存取列表
取指定页的数据,返回分页数据列表。
分页位置:“整数型”,可以被省略。指定获取数据的页面位置,如果为空或者小于1则默认为1。
取分页数据到数组() : 整数型
取指定页的数据并转换到指定类型的自定义数据数组,返回数据条数。
分页位置:“整数型”,可以被省略。指定获取数据的页面位置,如果为空或者小于1则默认为1。
映射名称:“文本型”。在对象映射中心配置的名称。
自定义数组变量:“通用型”,提供参数数据时只能提供变量数组。将对象映射到的自定义数组。
取分页数据到模板格式() : 整数型
取指定页的数据,返回分页数据列表,并且自动组装成统一的模板用数据格式。
分页位置:“整数型”,可以被省略。指定获取数据的页面位置,如果为空或者小于1则默认为1。
关闭() : 逻辑型
关闭当前分页对象,关闭后会自动释放所有相关资源。