nodejs進階(6)—連接MySQL數(shù)據(jù)庫示例
1. 建庫連庫
連接MySQL數(shù)據(jù)庫需要安裝支持
npm install mysql
我們需要提前安裝按mysql sever端
建一個數(shù)據(jù)庫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);
接下來我們利用nodejs連接mysql數(shù)據(jù)庫
var mysql = require('mysql'); //調(diào)用MySQL模塊
//創(chuàng)建一個connection
var connection = mysql.createConnection({
host: 'localhost', //主機
user: 'root', //MySQL認證用戶名
password: 'root', //MySQL認證用戶密碼
database: 'mydb1',
port: '3306' //端口號
});
//創(chuàng)建一個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í)行查詢
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!');
});
但是實際每次創(chuàng)建連接都需要一定的開銷,執(zhí)行效率就會有影響。下面介紹一種連接池連mysql的方法:node-mysql
2. 連接池配置使用
node-mysql是目前最火的node下的mysql驅(qū)動,是mysqlpool的一個模塊。
下面的代碼是提供一個連接池,getPool函數(shù)返回createPool創(chuàng)建的數(shù)據(jù)庫連接池對象。
var mysql = require('mysql'); //調(diào)用MySQL模塊
function OptPool(){
this.flag=true; //是否連接過
this.pool = mysql.createPool({
host: 'localhost', //主機
user: 'root', //MySQL認證用戶名
password: 'root', //MySQL認證用戶密碼
database: 'test',
port: '3306' //端口號
});
this.getPool=function(){
return this.pool;
}
};
module.exports = OptPool;
下面的代碼展示如何使用這個連接池,插入和查詢的使用。需要注意的是conn.release(); //釋放一個連接放回連接池 需要再操作結(jié)束后再執(zhí)行,否則后面的數(shù)據(jù)庫操作會報錯。
var OptPool = require('./models/OptPool');
var optPool = new OptPool();
var pool = optPool.getPool();
//執(zhí)行SQL語句
//從連接池中獲取一個連接
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(); //放回連接池
})
//查詢
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(); //放回連接池
});
});
下面介紹一個復雜一點的增刪查改的數(shù)據(jù)庫操作,因相互之間有依賴,所以代碼可讀性就變得特別差。
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]);
}
});
});
});
});
});
})
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- nodejs環(huán)境快速操作mysql數(shù)據(jù)庫的方法詳解
- nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解
- nodejs簡單訪問及操作mysql數(shù)據(jù)庫的方法示例
- nodejs實現(xiàn)的連接MySQL數(shù)據(jù)庫功能示例
- NodeJS鏈接MySql數(shù)據(jù)庫的操作方法
- nodejs和C語言插入mysql數(shù)據(jù)庫亂碼問題的解決方法
- nodejs連接mysql數(shù)據(jù)庫簡單封裝示例-mysql模塊
- nodejs中操作mysql數(shù)據(jù)庫示例
- nodejs中關(guān)于mysql數(shù)據(jù)庫的操作
相關(guān)文章
Nodejs基于LRU算法實現(xiàn)的緩存處理操作示例
這篇文章主要介紹了Nodejs基于LRU算法實現(xiàn)的緩存處理操作,結(jié)合具體實例形式分析了LRU算法的原理、功能以及nodejs使用LRU算法實現(xiàn)緩存處理操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-03-03
nodejs操作mongodb的填刪改查模塊的制作及引入實例
下面小編就為大家分享一篇nodejs操作mongodb的填刪改查模塊的制作及引入實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
nest.js,egg.js,midway,express,koa的區(qū)別小結(jié)
本文主要介紹了nest.js,egg.js,midway,express,koa的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
Linux使用Node.js建立訪問靜態(tài)網(wǎng)頁的服務實例詳解
這篇文章主要介紹了Linux使用Node.js建立訪問靜態(tài)網(wǎng)頁的服務實例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Node.js應用程序遇到了內(nèi)存溢出的問題解決方案
文章介紹了Node.js應用程序內(nèi)存溢出的原因,包括內(nèi)存泄漏、大型數(shù)據(jù)集處理、無限循環(huán)或遞歸、并發(fā)問題和外部內(nèi)存分配,文章還提供了優(yōu)化代碼、分批處理數(shù)據(jù)和增加內(nèi)存限制的解決方案,感興趣的朋友跟隨小編一起看看吧2025-01-01
nodejs dgram模塊廣播+組播的實現(xiàn)示例
這篇文章主要介紹了nodejs dgram模塊廣播+組播的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解
這篇文章主要介紹了window系統(tǒng) nodejs安裝opencv環(huán)境配置,結(jié)合圖文形式詳細分析了window環(huán)境下 nodejs安裝opencv的具體步驟、注意事項2023-04-04

