Appearance
informat.jdbc 数据库操作
概述
使用informat.jdbc
对象进行数据库相关操作
INFO
- 连接MYSQL、SQLSERVER、DB2、Oracle等数据库,需要下载对应的jdbc驱动。
- 目录:{织信安装目录}/instance/informat-biz/libs
createConnection
创建数据库连接
javascript
informat.jdbc.createConnection(connection)
TIP
- 连接创建不成功会抛出异常
- 设置了
autoCommit
等于true
时,在执行update、insert、delete语句时将会自动提交事务 - 执行过程中出错会自动回滚
- 在脚本执行结束后,创建的连接会自动关闭
参数 | 类型 | 描述 |
---|---|---|
connection | ConnectionInfo | 数据库连接信息 |
返回值
返回数据库连接对象Connection,使用此对象可进行数据库的添查删改操作
示例
javascript
const connection = informat.jdbc.createConnection({
dburl: 'jdbc:oracle:thin:@host/XE',
dbuser: 'user',
dbpassword: 'pass',
driverClassName: 'oracle.jdbc.driver.OracleDriver',
autoCommit: false
})
connection.select('select * form table', (row) => {
console.log(row.getString(1))
})
Connection
select
执行查询,如果查询失败会抛出异常
javascript
connection.select(sql, handler, ...args)
参数 | 类型 | 描述 |
---|---|---|
sql | String | 查询的SQL |
handler(ResultSet) | Function | 查询结果回调函数 |
args | ...Object | 查询的参数 |
示例1
javascript
//查询 user 表中name等于tom的数据
connection.select('select * from user where name=?', (rs) => {
console.log(rs.getString('name'))
}, 'tom')
示例2 使用like
javascript
//查询 user 表中name包含tom的数据
connection.select('select * from user where name like concat(' % ',?,' % ')', (rs) => {
console.log(rs.getString('name'))
}, 'tom')
示例3 使用in
javascript
//查询 user 表中name是tom或jerry的数据
connection.select('select name from user where name in(?,?)', (rs) => {
console.log(rs.getString('name'))
}, 'tom', 'jerry')
insert
执行插入,如果插入失败会抛出异常
javascript
connection.insert(sql, returnAutoGeneratedKeys, ...args)
参数 | 类型 | 描述 |
---|---|---|
sql | String | 查询的SQL |
returnAutoGeneratedKeys | Boolean | 是否返回自增的主键ID |
args | ...Object | 插入的参数 |
返回值
类型为Integer
如果设置了returnAutoGeneratedKeys为true,并且执行的操作为insert则返回最后插入数据的自增ID
示例
javascript
connection.insert('insert into user(name,age) values (?, ?)', true, 'tom', 10)
update
执行更新或者删除, 如果更新或者删除失败会抛出异常
javascript
connection.update(sql, ...args)
参数 | 类型 | 描述 |
---|---|---|
sql | String | 查询的SQL |
args | ...Object | 更新的参数 |
返回值 类型为Integer
返回更新或删除成功的记录条数
示例
javascript
connection.update('update user set age=?', 10)
javascript
connection.update('delete from user where age=?', 10)
::::
commit
提交事务,如果提交事务失败会抛出异常
javascript
connection.commit()
rollback
回滚事务,如果回滚事务失败会抛出异常
javascript
connection.rollback()
tableConnection
获取应用数据表的数据库连接
javascript
informat.jdbc.tableConnection()
INFO
- 使用应用数据表的数据库连接可以查询、更新、删除应用的数据表。
- 如果连接创建不成功会抛出异常。
- 在使用数据表连接执行查询的时候,需要将数据表的标识符转换为小写形式
返回值
返回数据库连接对象Connection,使用此对象可进行数据库里的数据表进行添查删改操作。
示例
例如有数据表tableDemo
字段标识符 | 名称 |
---|---|
id | ID |
name | 名称 |
maxAge | 最大年龄 |
需要使用以下SQL执行查询
sql
select id, name, max_age from table_demo;
javascript
var ret = []
var conn = informat.jdbc.tableConnection();
conn.select(`select id,name,create_time from task limit 10`, (rs) => {
ret.push({
id: rs.getString('id'),
name: rs.getString('name'),
createTime: rs.getTimestamp('create_time'),
})
});
console.log('ret', ret);
如果想查询关联列表字段对应的邻接表
,查询的格式为:
数据表标识符$字段标识符(驼峰转为下划线)
示例
javascript
var ret = []
var conn = informat.jdbc.tableConnection();
var sql = `select a.id from task$report a
inner join task b on a.id=b.id`;
conn.select(sql, (rs) => {
ret.push(rs.getString('id'))
})
console.log('ret', ret);
systemConnection
获取系统数据库连接
javascript
informat.jdbc.systemConnection()
TIP
- 连接创建不成功会抛出异常,使用系统数据库连接可以查询、更新、删除系统内的所有表。
- 使用系统数据库连接可以查询、更新、删除系统内的所有数据表。需要注意的是除非是非常必要的情况下,不要使用此功能。织信内部的数据表会随着版本的迭代发生变化,直接访问系统底层数据表有可能会导致在织信版本更新后应用功能异常。
- 需要注意的是当使用
systemConnection
执行SQL语句时,表名的中appid
要使用informat.app.appId()
获取。在应用分发的过程中appid
会发生变化。
返回值
返回数据库连接对象Connection
示例
javascript
var conn = informat.jdbc.systemConnection();
var ret = []
conn.select(`select id,name,create_time from v_croe0zft168y3_task limit 10`, (rs) => {
ret.push({
id: rs.getString('id'),
name: rs.getString('name'),
createTime: rs.getTimestamp('create_time'),
})
})
console.log('ret', ret);
nextRecordId
为记录生成唯一ID
javascript
informat.jdbc.nextRecordId();
返回值 类型String
,返回13位小写字母和数字组成的字符串,并且首字母为小写字母。
示例
javascript
informat.jdbc.nextRecordId();
text
u5wxh9kl3mxvi
safesql
生成安全的sql,为带有占位符?
的sql
生成安全的完整sql
javascript
informat.jdbc.safesql(sql, params);
参数 | 类型 | 描述 |
---|---|---|
sql | String | 数据库语句 |
params | ...Object | 入参 |
返回值 类型为String
,安全Sql
示例
javascript
const sql = `update tab set age=?,name=? where id=?`;
const params = [18, "李四", `'张' or 1=1`];
const result = informat.jdbc.safesql(sql, params);
sql
update
tab
set age = 18,
name = '李四'
where id = ''
'张'
' or 1=1'
ResultSet
TIP
columnIndex为索引时,起始索引为1
方法 | 返回值 | 描述 |
---|---|---|
getString(columnIndex) | String | 按照索引或者列名获取String类型的列 |
getBoolean(columnIndex) | String | 按照索引或者列名获取Boolean类型的列 |
getByte(columnIndex) | String | 按照索引或者列名获取Byte类型的列 |
getShort(columnIndex) | String | 按照索引或者列名获取Short类型的列 |
getInt(columnIndex) | String | 按照索引或者列名获取Integer类型的列 |
getLong(columnIndex) | String | 按照索引或者列名获取Long类型的列 |
getFloat(columnIndex) | String | 按照索引或者列名获取Float类型的列 |
getDouble(columnIndex) | String | 按照索引或者列名获取Double类型的列 |
getBytes(columnIndex) | String | 按照索引或者列名获取byte[]类型的列 |
getDate(columnIndex) | String | 按照索引或者列名获取Date类型的列 |
getTime(columnIndex) | String | 按照索引或者列名获取Time类型的列 |
getTimestamp(columnIndex) | String | 按照索引或者列名获取Timestamp类型的列 |
getObject(columnIndex) | String | 按照索引或者列名获取Object类型的列 |
getBigDecimal(columnIndex) | String | 按照索引或者列名获取BigDecimal类型的列 |
getColumnCount() | Integer | 返回结果集的列数量 |
getColumnName(columnIndex) | String | 按照索引返回列名 |
getColumnTypeName(columnIndex) | String | 按照索引返回列类型 |