aardio 文档

com.db2 库模块帮助文档

实现原理

安装 DB2 客户端驱动

请先安装 IBM Data Server Driver Package 。

使用示例

import com.db2;

// 方式1:使用参数表连接
var db = com.db2({
    Database = "SAMPLE";
    Hostname = "localhost";
    Port = 50000;
    Protocol = "TCPIP";
    Uid = "db2admin";
    Pwd = "password";
});

// 方式2:使用 DSN 连接
var db = com.db2({
    DSN = "DB2_DSN";
    Uid = "db2admin";
    Pwd = "password";
});

// 方式3:使用连接字符串
var db = com.db2("Provider=IBMDADB2;Database=SAMPLE;Hostname=localhost;Port=50000;Protocol=TCPIP;Uid=db2admin;Pwd=password;");

if(!db){
    print("连接失败");
    return;
}

// 执行查询
var data = db.getTable("SELECT * FROM EMPLOYEE WHERE SALARY > ?",{50000});

for(i=1;#data){
    print(data[i]);
}

// 使用命名参数
var data = db.getTable("SELECT * FROM EMPLOYEE WHERE DEPT = @dept AND SALARY > @salary",{
    dept = "D01";
    salary = 50000;
});

// 执行插入
db.exec("INSERT INTO EMPLOYEE (ID, NAME) VALUES (?, ?)",{100,"张三"});

// 使用事务
db.beginTrans();
db.exec("UPDATE EMPLOYEE SET SALARY = SALARY * 1.1 WHERE DEPT = 'D01'");
db.commitTrans();

// 遍历结果
for rs in db.each("SELECT * FROM DEPARTMENT") {
    print(rs("DEPTNO").Value, rs("DEPTNAME").Value);
}

// 使用 Command 对象
var cmd = db.createCommand("SELECT * FROM EMPLOYEE WHERE DEPT = @dept");
cmd.bind({dept = "D01"});
var result = cmd.getTable();

db.close(); 

与 sqlServer(SQL Server)支持库的一些区别

标识符转义:DB2 使用双引号 "identifier" 而非 SQL Server 的方括号 [identifier] 时间格式:DB2 时间戳格式为 YYYY-MM-DD-HH.MM.SS 二进制数据:DB2 使用 X'hex' 格式而非 SQL Server 的 0xhex rowCount 方法:使用 DB2 的 ROW_COUNT() 函数 日期类型:使用 adDBTimeStamp(135)更适合 DB2 的 TIMESTAMP 类型

com 成员列表 #

com.db2("数据库连接语句",其他格式化参数) #

db2("Provider=IBMDADB2;Database=数据库名;Hostname=127.0.0.1;Port=50000;Protocol=TCPIP;Uid=用户名;Pwd=密码");

com.db2() #

返回对象:comDb2Object

com.db2(连接参数表) #

db2({   
    Database = "数据库名";  
    Hostname = "127.0.0.1";  
    Port = 50000;  
    Protocol = "TCPIP";  
    Uid = "用户名";  
    Pwd = "密码";   
})

com.db2 成员列表 #

DB2 数据库客户端。
请先安装 IBM Data Server Driver Package 。

com.db2.escape() #

转义参数指定值为用于 SQL 查询语句的参数化值

com.db2.escapeId() #

如果传入参数是文本则转换为 SQL 标识符,
返回文本首尾会添加双引号,

如果传入参数是表, 则格式化为 SQL 键值对并以 AND 为分隔符,
如果表中的值为数组,则格式化为 IN 语句

com.db2.format(SQL语句,格式化参数...) #

格式化 SQL 查询语句。
所有需要格式化 SQL 语句的函数调用此函数格式化 SQL语句,
如果格式化参数不是表则调用 string.format 格式化,否则按以下规则格式化:

SQL语句中?或??占位符使用表的数组元素格式化,
@字符开始的命名参数使用表的名值对元素格式化,
其中??格式化为标识符,其他占位符格式化为参数值。

字符串转为SQL安全转义字符串,buffer转为 X'4D7953514C' 格式,
数组则自动展开为列表,例如{'a', 'b'}格式化为'a', 'b'
嵌套数组则格式化为分组列表,例如{{'a', 'b'}, {'c', 'd'}} 格式化为 ('a', 'b'), ('c', 'd')
非数组的命名表,则格式化为 SQL 键值对,默认以逗号为分隔符,
??占位符格式化 SQL 键值对则以 AND 为分隔符,并将数组值转换为IN语句

comDb2CmdObject 成员列表 #

comDb2CmdObject.addParameter #

调用createParameter创建参数对象,
设置值并添加到SQL执行参数中
注意如果直接使用这个函数添加参数,
SQL语句中应当用?号作为参数占位符,
参数只按添加顺序匹配SQL中的参数

comDb2CmdObject.addParameter() #

返回对象:comDb2ParameterObject

comDb2CmdObject.addParameter(名字,值,参数类型,字段类型,字段大小) #

直接添加SQL执行参数
除名字,值以外的其他参数不必要设置
返回创建的参数对象

注意参数对象虽然必须设置正确的名字,
但实际上只按添加顺序执行

comDb2CmdObject.bind() #

参数是一个表,
可使用多个键值对批量指定SQL命令对象的多个参数,
此函数会按参数在SQL中出现的顺序逐个添加参数,
SQL语句中所有参数名前面必须额外添加@前缀,
此函数返回命令对象自身

返回对象:comDb2CmdObject

comDb2CmdObject.cancel() #

取消执行

comDb2CmdObject.commandText #

要执行的 SQL 命令语句

comDb2CmdObject.commandType #

命令类型
普通SQL为1,存储过程为4

comDb2CmdObject.createParameter(名字,字段类型,参数类型,字段大小,参数值) #

创建参数
参数中用到的常量请使用COM对象的成员常量获取,
例如cmd.adLongVarWChar
这个函数创建的参数还需要调用parameters.append添加到执行参数中

不建议直接调用此函数,可以使用更简单的addParameter或bind函数添加参数

comDb2CmdObject.each() #

for(rs in comDb2CmdObject.each() ){ 
    io.print( rs(0).value );/*执行SQL命令并遍历结果集  
rs为 ADODB.Recordset 对象,即ADO 表记录集  
可以使用 rs("字段名").value自记录集中提取数据,  
更多用法请参考 ADO  文档。*/
}

comDb2CmdObject.execute() #

返回对象:comDb2RsObject

comDb2CmdObject.execute(ra,parameters.option) #

执行查询,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
参数options 一个或者多个 CommandTypeEnum 或 ExecuteOptionEnum 值。
返回记录集对象,execute 返回的记录集没有 getTable,stepQuery 函数。
executeRecords 返回的记录集提供 getTable,stepQuery 函数。

comDb2CmdObject.executeNoRecords(ra,parameters) #

执行查询不返回记录集,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值

comDb2CmdObject.executeRecords() #

返回对象:comDb2RsObject

comDb2CmdObject.executeRecords(ra,parameters.option) #

执行查询,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
参数options 一个或者多个 CommandTypeEnum 或 ExecuteOptionEnum 值。
返回记录集对象,execute 返回的记录集没有 getTable,stepQuery 函数。
executeRecords 返回的记录集提供 getTable,stepQuery 函数。

comDb2CmdObject.executeStream(ra,parameters) #

执行查询返回流,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值

comDb2CmdObject.getRows() #

查询并返回包含结果数据的SafeArray数组
此函数返回的数据是先列后行,与getTable相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值,
也可以使用 数据.字段名[列号] 获取对应的值

返回数组的元表中使用recordCount记录了总行数,
结果集为空也会返回空数组,可使用 @.recordCount判断记录集的行数
元表中的fields字段则是记录了所有字段名的数组.

所有值后面的占位空白没有去除
可使用getTable函数获取处理过空白占位符的数据,
或参考该函数源码自行处理尾部空白

comDb2CmdObject.getTable() #

执行SQL命令返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度

comDb2CmdObject.parameters("字符串参数") #

返回已添加的参数

comDb2CmdObject.parameters() #

返回对象:comDb2ParameterObject

comDb2CmdObject.stepQuery() #

执行SQL命令
返回查询结果集第一行的数据,由键值对列组成
无数据返回null

comDb2CmdObject.parameters 成员列表 #

参数列表

comDb2CmdObject.parameters.append(参数对象) #

添加参数
注意参数对象虽然必须设置正确的名字,
但实际上只按添加顺序执行

comDb2CmdObject.parameters.count() #

返回参数长度

comDb2CmdObject.parameters.delete(索引) #

删除参数

comDb2CmdObject.parameters.refresh() #

刷新参数

comDb2Object 成员列表 #

comDb2Object.* #

可直接使用对象的成员获取ADO组件提供的COM常量
这些常量名的前缀都是 ad

comDb2Object.beginTrans() #

启动事务,返回嵌套层数
注意如果未调用此函数开启事务,默认每条独立SQL语句仍然会自动创建独立事务

comDb2Object.close() #

关闭数据库连接

comDb2Object.codepage #

非 Unicode 字符的默认编码

comDb2Object.commitTrans() #

提交事务

comDb2Object.createCommand() #

返回对象:comDb2CmdObject

comDb2Object.createCommand(sql,其他格式化SQL参数) #

创建命令对象
格式化规则请参考 db2.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化

comDb2Object.each() #

返回对象:comDb2RsObject

comDb2Object.each(sql,其他格式化参数) #

for(rs in comDb2Object.each("SELECT * FROM 表名") ){ 
    io.print( rs("字段名").value );
}

comDb2Object.eachTableObject #

for(tbName,tbType,tbObj in comDb2Object.eachTableObject() ){

}

comDb2Object.eachTableObject() #

返回对象:ADOXCatalogTblObject

comDb2Object.exec(sql,其他格式化SQL参数) #

执行 SQL 语句
格式化参数规则请参考 db2.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化。

执行失败抛出异常。
执行成功返回受影响的记录行数

comDb2Object.existsProcedure("存储过程名") #

判断数据库中是否存在指定存储过程

comDb2Object.existsTable("表名") #

判断数据库中是否存在指定表

comDb2Object.findProcedureObject("存储过程名") #

返回存储过程对象

comDb2Object.findTableObject("表名") #

返回表对象

comDb2Object.findTableObject() #

返回对象:ADOXCatalogTblObject

comDb2Object.firstTableName() #

返回数据库的第一个表名。
参数 @1 可选用一个字符串指定表类型,默认为 "TABLE"。

comDb2Object.firstTableObject() #

返回数据库中的第一个表对象。
参数 @1 可选用一个字符串指定表类型,默认为 "TABLE"。

返回对象:ADOXCatalogTblObject

comDb2Object.getRows() #

查询并返回包含结果数据的数组
此函数返回的数据是先列后行,与getTable相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值,
也可以使用 数据.字段名[列号] 获取对应的值

返回数组的元表中使用recordCount记录了总行数,
结果集为空也会返回空数组,可使用 @.recordCount判断记录集的行数
元表中的fields字段则是记录了所有字段名的数组.

所有值后面的占位空白没有去除
可使用getTable函数获取处理过空白占位符的数据,
或参考该函数源码自行处理尾部空白

comDb2Object.getTable("SELECT * FROM 表名",其他格式化参数) #

返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度

comDb2Object.openRecordSet() #

返回对象:comDb2RsObject

comDb2Object.openRecordSet(sql,游标类型,锁定方法,其他格式化SQL参数) #

打开记录集,游标���型如下:
0:默认值,启动一个只能向前移动的游标
1:打开键集类型游标,允许任意移动,并且允许更改记录集
2:打开动态类型游标,许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
3:打开原生类型游标

锁定方法如下:
1:默认值,不能改变数据
2:悲观锁,编辑时立即锁定数据源的记录
3:乐观锁,只在调用Update 方法时才锁定记
4: 乐观批更新

comDb2Object.rollbackTrans() #

回滚事务

comDb2Object.rowCount() #

返回上次执行增、删、改、查等SQL影响的记录行数

comDb2Object.stepQuery("SELECT * FROM 表名",其他格式化参数) #

返回查询结果集第一行的数据,由键值对列组成,

格式化规则请参考 db2.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化

comDb2Object.connection 成员列表 #

连接对象

comDb2Object.connection.ConnectionString #

连接串

comDb2Object.connection.Errors() #

返回对象:adoConnErrObject

comDb2Object.connection.Errors(0) #

参数指定错误索引

comDb2Object.connection.Errors 成员列表 #

错误集合

comDb2Object.connection.Errors.count #

错误数

comDb2ParameterObject 成员列表 #

comDb2ParameterObject.direction #

参数的类型,默认是adParamInput

comDb2ParameterObject.name #

参数名称

comDb2ParameterObject.size #

数据长度

comDb2ParameterObject.value #

参数值

comDb2RsObject 成员列表 #

comDb2RsObject.GetRows #

查询并返回包含结果数据的数组
此函数返回的数据是先列后行,与getTable相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值

comDb2RsObject.GetRows(rows,start,fields) #

查询并返回包含结果数据的数组,所有参数可选,
rows 指定获取行数,默认为-1,即获取所有剩下的行,0,
@start为可选参数,可选使用以下数值:
_adBookmarkCurrent 0 自当前记录开始
_adBookmarkFirst 1 自首条记录开始
_adBookmarkLast 2 自最后一条记录开始
@ields 可选用一个字符串、或字符串数组指定要获取的列,
也可用数值,或数值数组指定要获取的列

comDb2RsObject.bof #

是否已经到记录集开始,没有更多数据了

comDb2RsObject.close() #

关闭记录集

comDb2RsObject.eof #

是否移动到记录集尾部,没有更多数据了

comDb2RsObject.getTable() #

执行SQL命令返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度

comDb2RsObject.move(numRecords,start) #

移动游标位置,
注意第一条记录游标位置为0,
@start为可选参数,可选使用以下数值:
_adBookmarkCurrent 0 自当前记录开始
_adBookmarkFirst 1 自首条记录开始
_adBookmarkLast 2 自最后一条记录开始

comDb2RsObject.nextRecordset() #

关闭当前结果集并打开下一个结果集。
注意要小写函数名的第一个字母。
nextRecordset 封装了大写首字母的 COM 函数 NextRecordset,
对返回的记录集对象添加了 getTable,stepQuery 等函数。

返回对象:comDb2RsObject

comDb2RsObject.recordCount #

获取记录总数,
如果该值为-1,请修改为静态方式打开记录集

comDb2RsObject.stepQuery() #

执行SQL命令
返回查询结果集第一行的数据,由键值对列组成
无数据返回null

Markdown 格式