node.js操作mysql数据库和sql server数据库

这一篇博客主要是数据库的,特别是sql server数据库

首先讲解mysql

因为mysql的操作并不复杂,所以讲解会很快

第一步

第一步肯定是导入模块,和配置配置项

const mysql = require("D:/Program Files/node/node_modules/npm/node_modules/mysql");

// 然后配置配置项
config = {
    host     : '127.0.0.1',
    user     : 'root',
    password : '123456',
    port: 3306,
    database: 'customer'
}
创建数据库连接接口,并且连接数据库
var conn = mysql.createConnection(config);
conn.connect();
查询数据
var sql = "select * from cu where id=1";
conn.query(sql,function (err,result,fields) {
    if (err){
        throw err
    }
    console.log("读取的数据为:" + result[0]);
})
//断开数据库
conn.end();
注意:一定要断开数据库
打印的数据为

javascript读取mysql js读取mysql数据库_javascript读取mysql


我们可以看到,打印的结果是一个对象,如果我们想要看它里面的详细数据,可以用JSON.stringify()来把对象转化为json字符串

console.log("读取的数据为:" + JSON.stringify(results));
插入新的数据
const mysql = require("D:/Program Files/node/node_modules/npm/node_modules/mysql");

// 然后配置配置项
config = {
    host     : '127.0.0.1',
    user     : 'root',
    password : '123456',
    port: 3306,
    database: 'customer'
}

//然后创建连接数据库的接口
var conn = mysql.createConnection(config);

//然后连接数据库
conn.connect();

//然后执行查询语句
var sql = "insert into cu(company_name,customer_name,customer_address,customer_type) value('333','444','1235',1)";
conn.query(sql,function (err,results,fields) {
    if (err){
        throw err
    }
    console.log("读取的数据为:" + JSON.stringify(results));
})

//断开数据库
conn.end();
打印的数据

javascript读取mysql js读取mysql数据库_数据_02

这里面最重要的数据就是affectedRows,这个数据代表了受影响的行数,刚才插入一条,就代表又一条数据受到了影响,其他的操作也是差不多,直接修改sql语句就可以了。

操作sql server数据库

sql server数据在node.js里面操作的话,就不像mysql那么好用,它是使用mssql模块来操作的,然后mssql是用连接池来操作的,然后连接数据库也是被promise包裹着的,所以要熟悉promise的操作,才可以很好的操作mssql。

导入模块和配置配置项
const mssql = require("D:/Program Files/node/node_modules/mssql");
config = {
    server:"127.0.0.1",
    user : "sa",
    password:"123456",
    database:"customer",
    port:1433,
    options: {
        encrypt: false // 是否加密
    },
    //因为mssql是符合promise的编程的,所以要设置连接池,
    pool: {
        min: 0,  //最少有0个连接
        max: 10,  //最多有10个连接
        idleTimeoutMillis: 3000 //当数据读取完之后延迟三秒才关闭连接
    }

}

如果想要使用mssql之前,一定要取了解sql server数据库。

options配置项是用来是否加密数据,在我们测试的一般都是不加密的,但是一旦上线之后防止其他黑客的攻击,所以要加密。
pool就是配置连接池min是运行最少的连接数是多少,max是运行最多的连接数是多少,idleTimeoutMillis是当数据读取完之后延迟三秒才关闭连接,这个参数是使用ConnectionPool这种连接方法是才又用。

在很多的mssql教程当中,大多数都是根据express框架来顺便讲解mssql,所以看起来就要花点时间,但是我这个是单独独立出来的,可以更好的理解。

第一种连接方式
var connection = new mssql.ConnectionPool(config, function (err) {
    var sql = "select * from cu where id=1";
    if (err) {
        console.log(err);
        return;
    }
    var ps = new mssql.PreparedStatement(connection,function (err) {
        console.log(err);
        return;
    })
    ps.prepare(sql, function (err) {
   if (err){
    console.log(err);
    return;
   }
   ps.execute(sql, function (err, result) {
    if (err){
     console.log(err);
     return;
    }
    ps.unprepare(function (err) {
     if (err){
      console.log(err);
      return;
     }
     console.log(result)
    });
   });
  });
})
因为mssql是跟promise的原理是一样的,所以所有的代码都要包裹在ConnectionPool的回调函数当中。

var connection = new mssql.ConnectionPool(config, function (err)
这个是用来创建连接数据库的对象。

在这里插入代码片

var ps = new mssql.PreparedStatement(connection,function (err)
这个是用来创建连接。

ps.prepare(sql, function (err) {
   if (err){
    console.log(err);
    return;
   })

这个是用来根据sql语句来打开数据库。

ps.execute(sql, function (err, result) {
    if (err){
     console.log(err);
     return;
    })

这个是用来执行sql语句,并且返回数据

ps.unprepare(function (err) {
     if (err){
      console.log(err);
      return;
     })

这个是用来关闭数据库,但是会在执行完语句三秒之后才关闭。

执行结果

javascript读取mysql js读取mysql数据库_mysql_03

真正的数据都是放在recordset中。
第二种方式操作数据库

第二种操作数据库的方式,是我个人非常喜欢的方式,因为比较简洁。

var db = function(sqlstr){
    //首先是创建连接,连接成功就会调用then里面的函数
    //然后运行语句,返回查询的结果,成功之后在调用下一个then里面的函数
    return mssql.connect(config).then(function () {
        return mssql.query(sqlstr)
    }).then(function(result){
        mssql.close();
        return result

    }).catch(function(error){

        mssql.close();

    })

}
var sql_2 = "select * from cu where id=1"
db(sql_2).then(function (values) {
    console.log(values)
})
我这里是用一个函数包裹着连接对象,因为mssql的连接对象就是一个promise的容器,如果不懂promise的就可以看我上一篇博客,里面详细讲解了promise。
这里的逻辑是这样的:首先是连接数据库mssql.connect(config)
因为连接对象就是promise对象,所以就调用一个then,然后在then对象里面执行sql语句,然后返回,在then一下,就把数据读取出来,在把数据返回给连接数据库对象,也就是最开始的mssql.connect(config),这样函数进行then调用的时候就可以获取到读取的数据了。
.catch(function(error){mssql.close();}) 这个的作用相当于,promise的reject。

执行结果

javascript读取mysql js读取mysql数据库_sql_04


结果也是和第一个是一样的。

说实话,我觉得mssql并不是那么好用,但是我目前还找不到比它好用的第三方库,所以先使用着先。