国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

nodejs進(jìn)階(6)―連接MySQL數(shù)據(jù)庫(kù)示例

2019-11-19 18:05:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1. 建庫(kù)連庫(kù)

連接MySQL數(shù)據(jù)庫(kù)需要安裝支持

npm install mysql

我們需要提前安裝按mysql sever端

建一個(gè)數(shù)據(jù)庫(kù)mydb1

mysql> CREATE DATABASE mydb1;mysql> SHOW DATABASES;+--------------------+| Database      |+--------------------+| information_schema || mysql       || mydb1       || performance_schema |+--------------------+4 rows in set (0.00 sec) 

然后建一張表user如下

create table user( id int not null primary key auto_increment, name VARCHAR(100) not null, pwd VARCHAR(100) not null,create_date TIMESTAMP NULL DEFAULT now())ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name); 

接下來(lái)我們利用nodejs連接mysql數(shù)據(jù)庫(kù)

var mysql = require('mysql'); //調(diào)用MySQL模塊//創(chuàng)建一個(gè)connection var connection = mysql.createConnection({     host: 'localhost',    //主機(jī)   user: 'root',        //MySQL認(rèn)證用戶(hù)名   password: 'root',    //MySQL認(rèn)證用戶(hù)密碼   database: 'mydb1',   port: '3306'          //端口號(hào) });//創(chuàng)建一個(gè)connection connection.connect(function(err){   if(err){         console.log('[query] - :'+err);     return;   }   console.log('[connection connect] succeed!'); }); //----插入var userAddSql = 'insert into user (name,pwd) values(?,?)';var param = ['fff','123'];connection.query(userAddSql,param,function(err,rs){  if(err){    console.log('insert err:',err.message);    return;  }    console.log('insert success');});//執(zhí)行查詢(xún) connection.query('SELECT * from user where id=?',[2], function(err, rs) {   if (err) {     console.log('[query] - :'+err);     return;   }   for(var i=0;i<rs.length;i++){    console.log('The solution is: ', rs[i].uname);   }});  //關(guān)閉connection connection.end(function(err){   if(err){     console.log(err.toString());    return;   }   console.log('[connection end] succeed!'); });

但是實(shí)際每次創(chuàng)建連接都需要一定的開(kāi)銷(xiāo),執(zhí)行效率就會(huì)有影響。下面介紹一種連接池連mysql的方法:node-mysql

2. 連接池配置使用

node-mysql是目前最火的node下的mysql驅(qū)動(dòng),是mysqlpool的一個(gè)模塊。

下面的代碼是提供一個(gè)連接池,getPool函數(shù)返回createPool創(chuàng)建的數(shù)據(jù)庫(kù)連接池對(duì)象。 

var mysql = require('mysql'); //調(diào)用MySQL模塊 function OptPool(){   this.flag=true; //是否連接過(guò)   this.pool = mysql.createPool({       host: 'localhost',    //主機(jī)     user: 'root',        //MySQL認(rèn)證用戶(hù)名     password: 'root',    //MySQL認(rèn)證用戶(hù)密碼     database: 'test',     port: '3306'          //端口號(hào)   });    this.getPool=function(){      return this.pool;   } }; module.exports = OptPool;

下面的代碼展示如何使用這個(gè)連接池,插入和查詢(xún)的使用。需要注意的是conn.release(); //釋放一個(gè)連接放回連接池 需要再操作結(jié)束后再執(zhí)行,否則后面的數(shù)據(jù)庫(kù)操作會(huì)報(bào)錯(cuò)。

var OptPool = require('./models/OptPool');  var optPool = new OptPool(); var pool = optPool.getPool(); //執(zhí)行SQL語(yǔ)句 //從連接池中獲取一個(gè)連接pool.getConnection(function(err,conn){   //----插入   var userAddSql = 'insert into user (uname,pwd) values(?,?)';   var param = ['eee','eee'];  conn.query(userAddSql,param,function(err,rs){    if(err){       console.log('insert err:',err.message);       return;     }     console.log('insert success');     //conn.release(); //放回連接池  })  //查詢(xún)   conn.query('SELECT * from user', function(err, rs) {     if (err) {       console.log('[query] - :'+err);       return;     }      for(var i=0;i<rs.length;i++){      console.log(rs[i].uname);     }    conn.release(); //放回連接池  });});

下面介紹一個(gè)復(fù)雜一點(diǎn)的增刪查改的數(shù)據(jù)庫(kù)操作,因相互之間有依賴(lài),所以代碼可讀性就變得特別差。

var OptPool = require('./models/OptPool');  var optPool = new OptPool(); var pool = optPool.getPool(); var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';var selectSQL = 'select * from table1 limit 10';var deleteSQL = 'delete from table1';var updateSQL = 'update table1 set name="conan update" where name="conan"';pool.getConnection(function(err,conn){ //delete  conn.query(deleteSQL, function (err0, res0) {    if (err0) console.log(err0);    console.log("DELETE Return ==> ");    console.log(res0);    //insert    conn.query(insertSQL, function (err1, res1) {      if (err1) console.log(err1);      console.log("INSERT Return ==> ");      console.log(res1);      //query      conn.query(selectSQL, function (err2, rows) {        if (err2) console.log(err2);        console.log("SELECT ==> ");        for (var i in rows) {          console.log(rows[i]);        }        //update        conn.query(updateSQL, function (err3, res3) {          if (err3) console.log(err3);          console.log("UPDATE Return ==> ");          console.log(res3);          //query          conn.query(selectSQL, function (err4, rows2) {            if (err4) console.log(err4);            console.log("SELECT ==> ");            for (var i in rows2) {              console.log(rows2[i]);            }          });        });      });    });  });})

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 光山县| 金门县| 敦化市| 嘉禾县| 澄迈县| 梨树县| 翁牛特旗| 澜沧| 应用必备| 房山区| 逊克县| 永丰县| 陵水| 根河市| 治多县| 民勤县| 天全县| 东阿县| 津市市| 辽阳县| 措美县| 定兴县| 武城县| 资中县| 镇沅| 松桃| 兴义市| 韩城市| 嵩明县| 鹿邑县| 神农架林区| 永善县| 福安市| 金坛市| 寻乌县| 任丘市| 威海市| 辉县市| 南江县| 新田县| 佛山市|