Nodejs操作MySql數據庫詳解

Nodejs操作MySql數據庫詳解

 

Nodejs操作MySql數據庫前提是,你已安裝MySQL數據庫和Nodejs。

關於MySQL8.0.19數據庫安裝與簡單使用

https://blog.csdn.net/cnds123/article/details/104454487

關於Node.js可以參見Node.js 新手入門

https://blog.csdn.net/cnds123/article/details/104559497

 

在cmd中使用node -v命令來查看當前是否安裝 Node 版本,若安裝出現如下圖所示版本號信息,說明已安裝Node.js:

新版的nodejs已經集成了npm,所以安裝nodejs時npm也一併安裝好了。可以通過輸入

npm -v

來測試是否成功安裝。出現版本提示表示已安裝。:

 

要想使用Node操作MySql數據庫,除了已安裝MySQL數據庫和Nodejs,還需要安裝mysql模塊(包)——node. 操作 MySQL的驅動程序。

npm install mysql 即可安裝mysql模塊(包),參見下圖:

其中有幾條警告(WARN)可以先不管。

【若安裝不了mysql模塊(包),使用淘寶鏡像去安裝】

 

安裝完之後如果要使用在代碼中引入就可以了:

mysql = require('mysql')

 

例、建立一個名connTest.js腳本文件,用來測試連接,若連接成功將提示“connected as id XX”,其內容如下:

/*引入mysql模塊*/

const mysql = require('mysql');

 

/*創建連接*/

const connection = mysql.createConnection({

    host: 'localhost',

    user: 'root',

    password: ''

});

 

/*連接mysql*/

connection.connect(function (err) {

    /*連接出錯的處理*/

    if (err) {

        console.error('error connecting: ' + err.stack);

        return;

    }

    console.log('connected as id ' + connection.threadId);

});

/*關閉連接mysql*/

connection.end();

 

使用node connTest.js運行它,參見下圖:

 

常見問題:node.js 連接mysql報錯:error:cannot find module 'mysql'

原因:js文件(如test.js)和mysql模塊(包)安裝的路徑不一致

 

解決辦法:

法一、把JS腳本文件放到紅框標出的目錄中,然後再運行node connTest.js

查看安裝過的模塊和包的安裝位置

npm ls 名字 -g

其中-g查看全局的模塊和包信息,去掉查看本地的

如查看mysql模塊和包的位置:npm ls mysql

 

法二、在cmd中切換到“js文件”所在的目錄(connTest.js所在的目錄D:\NodeTest)運行npm安裝mysql包(提示,在D:\NodeTest中產生node_modules子目錄),再運行node connTest.js

我的connTest.js保存在D:\NodeTest,參見下圖:

 

D:\NodeTest中產生的node_modules子目錄,包含你安裝的mysql模塊(包)。

 

連接成功,對mysql數據庫的查詢、添加數據等操作就可以進行了。

現在建立一個創建數據庫的腳本文件,文件名爲nodejs_mysql_DB.js,保存在D:\NodeTest中

var mysql = require('mysql');

var con = mysql.createConnection({

host: "localhost", user: "root", password: ""

});

con.connect(function(err) {

if (err) throw err;

console.log("Connected!");

con.query("CREATE DATABASE mysrcDB", function (err, result) {

if (err) throw err;

console.log("Database created");

});

});

/*關閉連接mysql*/

con.end();

 

腳本文件nodejs_mysql_DB.js用於創建名爲mysrcDB的數據庫。運行此腳本node nodejs_mysql_DB.js,參見下圖:

 

現在建立一個名爲mysqlTest.js的腳本文件,對mysrcDB的數據庫建表MYTABLE、插入數據、更新數據、更新數據等操作,內容如下:

// 引入Mysql

var mysql      = require('mysql');

var connection = mysql.createConnection({

  host     : 'localhost',

  user     : 'root',

  password : '',

  database : 'mysrcDB'

});

 

// 執行數據庫連接

connection.connect();

 

var sqlstring = "";

 

// 創建表

sqlstring = "Create Table MYTABLE (name VARCHAR(20), sex CHAR(1))"

connection.query(sqlstring, function (err, results, fields) {

    if (err) {

         console.log('[UPDATE ERROR] - ', err.message);

        return;

    }

    console.log('--------------------------CREATE----------------------------');      

    console.log('CREATE TABLE:', results);       

    console.log('------------------------------------------------------------\n\n'); 

});

 

// 插入數據

sqlstring = "Insert into MYTABLE Values('Michael', 'm')";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[INSERT ERROR] - ', err.message);

        return;

    }       

 

   console.log('--------------------------INSERT----------------------------');      

   console.log('INSERT ID - ', result);       

   console.log('------------------------------------------------------------\n\n'); 

});

 

// 更新數據

sqlstring = "Update MYTABLE Set name = 'Michael Jordan' Where sex = 'm'";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[UPDATE ERROR] - ', err.message);

        return;

    }       

    console.log('--------------------------UPDATE----------------------------');

    console.log('UPDATE affectedRows - ', result.affectedRows);

    console.log('------------------------------------------------------------\n\n'); 

});

 

// 查詢數據

sqlstring = "Select * From MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[SELECT ERROR] - ', err.message);

        return;

    }

 

    console.log('--------------------------SELECT---------------------------');

    console.log('SELECT - ', result);

    console.log('------------------------------------------------------------\n\n');  

});

 

//刪除數據

sqlstring = "Delete From MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[DELETE ERROR] - ', err.message);

        return;

    }       

 

    console.log('--------------------------DELETE----------------------------');

    console.log('DELETE affectedRows - ', result.affectedRows);

    console.log('------------------------------------------------------------\n\n'); 

});

 

//刪除表格

sqlstring = "Drop Table MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[DROP ERROR] - ', err.message);

        return;

    }       

 

    console.log('--------------------------DROP-----------------------------');

    console.log('DROP TABLE :', result.affectedRows);

    console.log('------------------------------------------------------------\n\n');   

});

 

// 斷開數據庫連接

connection.end();

 

【說明

MySql數據庫連接參數說明:

參數                  描述

host                    主機地址 (默認:localhost)

user                    用戶名

password                密碼

port                    端口號 (默認:3306)

database                數據庫名

charset                 連接字符集(默認:'UTF8_GENERAL_CI',注意字符集的字母都要大寫)

localAddress            此IP用於TCP連接(可選)

socketPath              連接到unix域路徑,當使用 host 和 port 時會被忽略

timezone                時區(默認:'local')

connectTimeout          連接超時(默認:不限制;單位:毫秒)

stringifyObjects        是否序列化對象

typeCast                是否將列值轉化爲本地JavaScript類型值 (默認:true)

queryFormat             自定義query語句格式化方法

supportBigNumbers       數據庫支持bigint或decimal類型列時,需要設此option爲true (默認:false)

bigNumberStrings        supportBigNumbers和bigNumberStrings啓用 強制bigint或decimal列以JavaScript字符串類型返回(默認:false)

dateStrings             強制timestamp,datetime,data類型以字符串類型返回,而不是JavaScript Date類型(默認:false)

debug                   開啓調試(默認:false)

multipleStatements      是否許一個query中有多個MySQL語句 (默認:false)

flags                   用於修改連接標誌

ssl                     使用ssl參數(與crypto.createCredenitals參數格式一至)或一個包含ssl配置文件名稱的字符串,目前只捆綁Amazon RDS的配置文件

 】

 

運行此腳本node mysqlTest.js,參見下圖:

 

Nodejs操作MySql數據庫小結:

連接到MySQL數據庫服務器;

對象上的query()方法來執行SQL語句;

關閉數據庫連接。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章