《node.js權(quán)威指南》(五)node.js在MySQL數(shù)據(jù)庫(kù)中的基本操作

接下來(lái),我們以mySQL數(shù)據(jù)庫(kù)為例檀何,介紹如何在Node.js中使用數(shù)據(jù)庫(kù)蝇裤。
首先,需要先使用npm包管理工具安裝MySQL客戶端開發(fā)包
npm install mysql

引入數(shù)據(jù)庫(kù)

var mysql = require('mysql')

建立連接


案例如下

var mysql = require('mysql')
var connection = mysql.createConnection({
    host:'172.16.20.103',
    port:3308,
    database:'test',
    user:'JRJ_Win',
    password:'FT%^$fjYR56'
})
connection.connect(function(err){
    if(err){
        console.log(err)
        console.log('與mysql數(shù)據(jù)庫(kù)連接失敗')
    }else{
        console.log('與mysql數(shù)據(jù)庫(kù)連接成功')
        connection.end(function(err){
            if (err) {
                console.log('關(guān)閉mysql數(shù)據(jù)庫(kù)失敗')
            }else{
                console.log('關(guān)閉mysql數(shù)據(jù)庫(kù)成功')
            }
        })
    }
})

案例效果


執(zhí)行數(shù)據(jù)庫(kù)的基本處理

connection.query(sql,[parameters],callback)

案例如下

var mysql = require('mysql')
var connection = mysql.createConnection({
    host:'172.16.20.103',
    port:3308,
    database:'test',
    user:'JRJ_Win',
    password:'FT%^$fjYR56'
})
connection.connect(function(err){
    if(err){
        console.log(err)
        console.log('與mysql數(shù)據(jù)庫(kù)連接失敗')
    }else{
        console.log('與mysql數(shù)據(jù)庫(kù)連接成功')
        connection.query('INSERT INTO win.luck_fine SET?',{username:'范小飯',age:18,sex:'女',dec:'愛(ài)吃'},function(err){
            if(err){
                console.log(err)
                console.log('插入數(shù)據(jù)失敗')
            }else{
                console.log('插入數(shù)據(jù)成功')
                connection.query('SELECT * FROM ??',['win.luck_fine'],function(err,result){
                    if(err){
                        console.log('查詢數(shù)據(jù)失敗')
                    }else{
                        console.log(result);
                        connection.end();
                    }
                })
            }
        })
    }
})

案例效果


以數(shù)據(jù)流的方式處理查詢數(shù)據(jù)

有時(shí)频鉴,用戶也許會(huì)查詢大量數(shù)據(jù)并希望單獨(dú)處理每一條單查詢的數(shù)據(jù)栓辜,在mysql模塊中,connection對(duì)象的query方法返回一個(gè)可用于處理數(shù)據(jù)流數(shù)據(jù)的對(duì)象砚殿。如果使用queru方法的對(duì)象啃憎,那么在query方法中不能使用callback參數(shù)指定回調(diào)函數(shù)


var mysql = require('mysql')
var fs = require('fs')
var connection = mysql.createConnection({
    host:'172.16.20.103',
    port:3308,
    database:'test',
    multipleStatements:true,
    user:'JRJ_Win',
    password:'FT%^$fjYR56'
})
var out = fs.createWriteStream('./message.txt')
out.on('error',function(err){
    console.log('寫文件操作失敗');
    process.exit();
})
connection.connect(function(err){
    if(err){
        console.log('與mysql數(shù)據(jù)庫(kù)連接失敗')
    }else{
        console.log('與mysql數(shù)據(jù)庫(kù)連接成功')
        var query = connection.query('select * from win.luck_fine') 
        query.on('error',function(err){
            console.log('寫文件操作失敗');
            process.exit();
        })
        query.on('fields',function(fields){
            var str = '';
            fields.forEach(function(field){
                if(str != ''){
                    str += String.fromCharCode(9);
                }else{
                    str += fields.username;
                }
            })
            out.write(str+'\r\n');
        })
        query.on('result',function(row){
            connection.pause()
            out.write(row.username+row.dec+'\r\n',function(err){
                connection.resume()
            })
        })
        query.on('end',function(row){
            console.log('數(shù)據(jù)全部寫入完畢')
            connection.end();
        })
    }
})

案例效果


創(chuàng)建連接池

在開發(fā)一個(gè)web應(yīng)用程序時(shí)辛萍,建立一個(gè)數(shù)據(jù)庫(kù)鏈接所消耗的性能成本是比較高的羡藐,在服務(wù)器應(yīng)用程序中贩毕,如果為每一個(gè)接收到的客戶端請(qǐng)求都建立一個(gè)或多個(gè)數(shù)據(jù)庫(kù)連接,將嚴(yán)重降低應(yīng)用程序的性能仆嗦,因此辉阶,在服務(wù)器應(yīng)用程序中,同城需要為多個(gè)成數(shù)據(jù)連接創(chuàng)建并維護(hù)一個(gè)連接池,當(dāng)連接不再需要使用時(shí)谆甜,這些連接可以緩存在連接池中垃僚,當(dāng)接受到下一個(gè)客戶端請(qǐng)求時(shí),可以從連接池中取出連接并重新利用规辱,不需要再重新建立數(shù)據(jù)庫(kù)連接谆棺。
var pool = mysql.createPool(options)

案例如下

var mysql = require('mysql')
var pool = mysql.createPool({
    host:'172.16.20.103',
    port:3308,
    database:'test',
    user:'JRJ_Win',
    password:'FT%^$fjYR56'
})
pool.getConnection(function(err,connection){
    if(err){
        console.log(err)
        console.log('與mysql數(shù)據(jù)庫(kù)連接失敗')
    }else{
        console.log('與mysql數(shù)據(jù)庫(kù)連接成功')
        connection.query('select * from win.luck_fine',function(err,rows){
            if(err){
                console.log('查詢數(shù)據(jù)操作失敗')
            }else{
                console.log(rows)
                pool.end();
            }
        })
    }
})

案例效果



同志們,點(diǎn)贊不花錢呀! 程序猿不易罕袋,且行且珍惜~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末改淑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浴讯,更是在濱河造成了極大的恐慌朵夏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榆纽,死亡現(xiàn)場(chǎng)離奇詭異仰猖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掠河,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門亮元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爆捞,“玉大人勾拉,你說(shuō)我怎么就攤上這事∨涸蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵双霍,是天一觀的道長(zhǎng)洒闸。 經(jīng)常有香客問(wèn)我丘逸,道長(zhǎng)掀宋,這世上最難降的妖魔是什么仲锄? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮涛舍,結(jié)果婚禮上富雅,老公的妹妹穿的比我還像新娘没佑。我一直安慰自己温赔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布啤贩。 她就那樣靜靜地躺著痹屹,像睡著了一般枉氮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上楼肪,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼爷速。 笑死莉给,一個(gè)胖子當(dāng)著我的面吹牛徐矩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曼玩,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼美旧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起陶舞,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后养涮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜀变,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡情屹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煎殷。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劣摇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勾习,到底是詐尸還是另有隱情,我是刑警寧澤涂乌,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站吭狡,受9級(jí)特大地震影響赵刑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牵现,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茅茂。 院中可真熱鬧,春花似錦走敌、人聲如沸掉丽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至空免,卻和暖如春蹋砚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柑船,地道東北人鞍时。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吮旅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庇勃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容