Skip to content

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语句时将会自动提交事务
  • 执行过程中出错会自动回滚
  • 在脚本执行结束后,创建的连接会自动关闭
参数类型描述
connectionConnectionInfo数据库连接信息

返回值

返回数据库连接对象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)
参数类型描述
sqlString查询的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)
参数类型描述
sqlString查询的SQL
returnAutoGeneratedKeysBoolean是否返回自增的主键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)
参数类型描述
sqlString查询的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

字段标识符名称
idID
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);
参数类型描述
sqlString数据库语句
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按照索引返回列类型