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)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注