node.js操作MySQL数据库

MySQL数据库作为最流行的开源数据库。基本上是每个web开发者必须要掌握的数据库程序之一了。


 

基本使用

node.js上,最受欢迎的mysql包就是mysql模块。

npm install mysql

然后在js脚本里面直接引用进来

var mysql      = require('mysql');

配置mysql的数据库连接。

var connection = mysql.createConnection({
  host     : 'ip',
  user     : '用户名',
  password : '密码',
  database : 'dbname'
});
connection.connect();

这样就拿到了一个连接。

然后就可以愉快的进行各种curd操作了。

node.js对数据库的curd都在query这个方法里面。这点和ado.net有很大的区别。

你的所有的操作,都从query的回调函数里面获得结果

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

 

连接池操作

在单机软件中,我们之间使用简单获得一个连接,然后就行了。

但是在面向互联网的web服务里面,频繁的创建和关闭连接,是很消耗服务器性能的。

于是我们的前辈们发明了各种池子。比如多线程操作中的线程池,游戏开发中的对象池,当然还包括数据库操作的连接池。

创建连接池:

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 连接池数量,
  host            : 'ip地址',
  user            : '账号',
  password        : '密码',
  database        : '数据库名称'
});

然后就是和上文一样的curd操作

复制代码
//从连接池中获取一个连接
pool.getConnection(function(errconnection{
  if (errthrow err// not connected!
 
  // 使用这个连接curd
  connection.query('SELECT something FROM sometable'function (errorresultsfields{
    // 使用完之后,记得把这个连接放到连接池里面去
    connection.release();
 
    // Handle error after the release.
    if (errorthrow error;
 
  });
});
复制代码

如果你的程序要退出,请把调用连接池的end()方法。不然程序会卡在后台,一直退出失败。

封装成Promise

在ES6中,可以直接用和C#的await一样的语法去调用js的异步函数。

但是要求这个函数必须是async声明和返回值是Promise对象。

复制代码
query = function (sql, arr, callback) {
    console.log('获取一个连接');
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);// not connected!
            } else {
                console.log('开始查询');
                connection.query(sql, arr, function (error, results, fields) {
                    connection.release();
                    console.log('连接已经释放,返回结果');

                    if (error) reject(error);
                    // callback && callback(results, fields)
                    resolve({
                        rows: results,
                        fields: fields
                    })
                });
            }


        });
    })


}
复制代码

简单的用法到这里就结束了。当然还有更高级的用法,比如MySQL的Cluster操作等。有兴趣的话,可以去研究,因为我目前用不到这种功能,所有就不往后去深究了。

有需要交流的欢迎大家加入QQ群:545594312

 

posted on   快乐海盗  阅读(641)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示