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();
注意:一定要断开数据库
打印的数据为
我们可以看到,打印的结果是一个对象,如果我们想要看它里面的详细数据,可以用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();
打印的数据
这里面最重要的数据就是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;
})
这个是用来关闭数据库,但是会在执行完语句三秒之后才关闭。
执行结果
真正的数据都是放在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。
执行结果
结果也是和第一个是一样的。