DatabaseService 数据库服务对象,该对象通过调用 Enhancer.getDatabaseService() 获取。

execute([connectionName, ]sql, params, callback) 执行 SQL,无需关心数据库连接,内部自动获取,返回。

  • @param connectionName {String} 数据连接名,如果缺省参数或者为空,则将使用默认数据连接执行 SQL。
  • @param sql {String} SQL 语句(SELECT, UPDATE, DELETE, INSERT)
  • @param params {Array} sql 执行参数,按照 sql 语句中占位符的顺序排列。
  • @param callback {Function} 回调函数
    • err {Object} 错误对象,不为空时需要做一些错误处理。
    • result {Object} 执行结果
      • rows -- 查询的结果行,执行 SELECT 时有效。
      • affectedRows -- 影响的行数目,执行 UPDATE, DELETE, INSERT 等语句时有效。
      • metaData -- 数据列元数据,执行 SELECT 时有效。
      • ... 其他增删改执行结果,不同的数据库返回的字段有所不同,可以执行console.log(result)在控制台查看。

【例】

var sql1 = 'SELECT * FROM table1... WHERE id = ?';
var param1 = [123];
var db = Enhancer.getDatabaseService();
db.execute(sql1, param1, function(err, result) {
    if (err) {
        /* 做一些错误处理,如果环境中有 done 方法,则直接 done(err) */
        return
    }

    if (!result.rows.length) {
        /* 做一些错误处理,如果环境中有 done 方法,则调用 
              done(null, {success: false, message: '消息'}) */
        return
    }

    var sql2 = 'UPDATE table2 set a = ? and b = 3 WHERE id = ?';
    var param2 = [1, 2, result.rows[0]];
    db.execute(sql2, param2, function(err2, result2) {
        if (err2) {
            /* 做一些错误处理,如果环境中有 done 方法,则直接 done(err) */
            return 
        }
        // ...
        /* 做一些错误处理,如果环境中有 done 方法,则调用  
        done(null, {success: true, result: result2});*/
    });
});

【注意】

  • JS 异步回调规范第一个参数一定会传递error 对象。没有错误,则传递 null。
  • 如果要执行多条串行的 SQL,回调嵌套太深,可以考虑用 async 模块优化。

beginTransaction([connectionName, ]callback) 开始事务。

  • @param connectionName {String} 数据连接名,如果缺省参数或者为空,则将使用默认数据连接开始事务。
  • @param callback {Function} 回调函数
    • err {Object} 错误对象,不为空时需要做一些错误处理。
    • conn {Object} 数据库连接对象

【例】

var DatabaseService = Enhancer.getDatabaseService();
DatabaseService.beginTransaction(function(err, conn) {
    var sql1 = 'INSERT INTO TABLE 1...';
    var sql2 = 'UPDATE TABLE 2...';
    conn.execute(sql1, [], function(err1, result1) {
        if (err1) {
            conn.rollback(function() {
                conn.release(); // 用完要释放连接。
            });
            /* 做一些错误处理,如果环境中有 done 方法,则直接 done(err) */
            return
        }
        conn.execute(sql2, [], function(err2, result2) {
            if (err2) {
                conn.rollback(function() {
                    conn.release(); // 用完要释放连接。
                });
                /* 做一些错误处理,如果环境中有 done 方法,则直接 done(err) */
                return 
            }
            // ... 
            conn.commit(function(err) {
                if (err) {
                    return conn.rollback(function() {
                        conn.release(); // 用完要释放连接。
                    });
                }
                conn.release(); // 用完要释放连接。
                ... 
            })
        });
    });
})
// 如果回调函数嵌套太深,建议用 async 模块做处理:https://github.com/caolan/async

results matching ""

    No results matching ""