zoukankan      html  css  js  c++  java
  • node.js连接数据库基本操作、封装数据库操作,输出到网页

    声明:以下代码测试通过,不同于直接的复制粘贴乱七八糟未测试的代码,完全可以用,最后会附上所有的代码和sql文件

    首先建立表,建表语句如下:

    /*
    SQLyog Ultimate v12.08 (64 bit)
    MySQL - 5.7.17-log : Database - test
    *********************************************************************
    */
    
    
    /*!40101 SET NAMES utf8 */;
    
    /*!40101 SET SQL_MODE=''*/;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */;
    
    USE `test`;
    
    /*Table structure for table `websites` */
    
    DROP TABLE IF EXISTS `websites`;
    
    CREATE TABLE `websites` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` CHAR(20) NOT NULL DEFAULT '' COMMENT '站点名称',
      `url` VARCHAR(255) NOT NULL DEFAULT '',
      `alexa` INT(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
      `country` CHAR(10) NOT NULL DEFAULT '' COMMENT '国家',
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    
    /*Data for the table `websites` */
    
    INSERT  INTO `websites`(`id`,`name`,`url`,`alexa`,`country`) VALUES (1,'Google','https://www.google.cm/',1,'USA'),(2,'淘宝','https://www.taobao.com/',13,'CN'),(3,'汪政','https://www.google-api.ac.cn',4689,'CN'),(4,'微博','http://weibo.com/',20,'CN'),(5,'Facebook','https://www.facebook.com/',3,'USA');
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

    下面是数据库表的结构:

    然后随便打开一个写代码的工具,建立(我的是Hbuilder,其他的原理相同),我的目录结构如下:

    第一步:安装你需要安装mysql,或者使用云Mysql也可以

    第二步:npm install mysql

    下面就是具体的代码了:

    查询数据

    /**
     * node.js 操作数据库之查询数据
     */
    const mysql = require('mysql');
    
    let connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'test'
    });
    
    connection.connect();
    
    let sql = 'SELECT id,name,url,alexa,country FROM websites';
    //
    connection.query(sql, function(err, result) {
        if(err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
    
        console.log('--------------------------SELECT----------------------------');
        console.log(result);
        console.log('------------------------------------------------------------
    
    ');
    });
    
    connection.end();

    添加数据

    /**
     * node.js 操作数据库之添加数据
     */
    const mysql = require('mysql');
    
    let connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'test'
    });
    
    connection.connect();
    
    let addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)';
    let addSqlParams = ['汪政', 'https://www.baidu.com','23453', 'CN'];
    connection.query(addSql, addSqlParams, function(err, result) {
        if(err) {
            console.log('[INSERT ERROR] - ', err.message);
            return;
        }
        console.log('--------------------------INSERT----------------------------');
        console.log('INSERT ID:', result);
        console.log('-----------------------------------------------------------------
    
    ');
    });
    connection.end();

    删除数据

    /**
     * node.js 操作数据库之删除数据
     */
    const mysql = require('mysql');
    
    let connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'test'
    });
    
    connection.connect();
    
    let delSql = 'DELETE FROM websites where id = 7';
    //
    connection.query(delSql, function(err, result) {
        if(err) {
            console.log('[DELETE ERROR] - ', err.message);
            return;
        }
    
        console.log('--------------------------DELETE----------------------------');
        console.log('DELETE affectedRows', result.affectedRows);
        console.log('-----------------------------------------------------------------
    
    ');
    });
    
    connection.end();

    修改数据

    /**
     * node.js 操作数据库之修改数据
     */
    const mysql = require('mysql');
    
    let connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'test'
    });
    
    connection.connect();
    
    let modSql = 'UPDATE websites SET name = ?,url = ? WHERE name = ?';
    let modSqlParams = ['汪政', 'https://www.google-api.ac.cn', '汪政1'];
    //
    connection.query(modSql, modSqlParams, function(err, result) {
        if(err) {
            console.log('[UPDATE ERROR] - ', err.message);
            return;
        }
        console.log('--------------------------UPDATE----------------------------');
        console.log('UPDATE affectedRows', result.affectedRows);
        console.log('-----------------------------------------------------------------
    
    ');
    });
    
    connection.end();

    接下来就是封装MySQL的操作了(简化写代码,需要自己写SQL)

    首先建立 db.js 文件,这个是数据库的具体信息,代码如下:

    // 配置链接数据库参数
    module.exports = {
        host: 'localhost',
        port: 3306, // 端口号
        database: 'test', // 数据库名
        user: 'root', // 数据库用户名
        password: 'root' // 数据库密码
    };

    接着建立 dbhelper.js 文件(由于之前写java遗留下来的命名习惯...),代码如下:

    const mysql = require('mysql'); // 引入mysql模块
    const databaseConfig = require('./db'); // 引入数据库配置模块中的数据
    
    // 向外暴露方法
    module.exports = {
        query: function(sql, params, callback) {
            // 每次使用的时候需要创建链接,数据操作完成之后要关闭连接
            let connection = mysql.createConnection(databaseConfig);
            connection.connect(function(err) {
                if(err) {
                    console.log('数据库链接失败');
                    throw err;
                }
                // 开始数据操作
                // 传入三个参数,第一个参数sql语句,第二个参数sql语句中需要的数据,第三个参数回调函数
                connection.query(sql, params, function(err, results, fields) {
                    if(err) {
                        console.log('数据操作失败');
                        throw err;
                    }
                    // 将查询出来的数据返回给回调函数
                    callback && callback(results, fields);
                    // results作为数据操作后的结果,fields作为数据库连接的一些字段
                    // 停止链接数据库,必须再查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
                    connection.end(function(err) {
                        if(err) {
                            console.log('关闭数据库连接失败!');
                            throw err;
                        }
                    });
                });
            });
        }
    };

    接下来我们建立测试用的 test.js 文件,测试封装的语句有没有问题:

    const db = require('./dbhelper');
    // 查询实例
    db.query('SELECT id,name,url,alexa,country FROM websites', [], function(result, fields) {
        console.log('查询结果:');
        console.log(result);
    });
    ////添加实例
    //var addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)';
    //var addSqlParams = ['汪政', 'https://www.baidu.com','23453', 'CN'];
    //db.query(addSql, addSqlParams, function(result, fields) {
    //    console.log('添加成功')
    //})

    最后建立 test_web.js 文件 ,测试时候可以把数据输入到网页端,或者给别人调用:

    const db = require('./dbhelper');
    let express = require('express');
    let app = express();
    let arr = [];
    // 查询实例
    db.query('SELECT id,name,url,alexa,country FROM websites', [], function(result, fields) {
        app.get('/select', function(req, res) {
            res.send(result);
        });
    });
    app.listen(3000);

    结语:SQL语句,不要使用 * ,var let const 的用法这里不做阐述,一般都用var也是可以的,没必要分的那么清,强迫症的除外。最后的显示在网页端的,我只写了查询的,其实增删改查就是那样。其他的使用get或者post方法,传输参数就可以。时间有限,就不写多多于的呢。希望能帮到大家。

    下载链接:https://share.weiyun.com/57CHAJg    (腾讯微云,直接就可以下载)

  • 相关阅读:
    系统集成项目管理工程师高频考点(第一章)
    2、无重复字符的最长子串
    1、爬楼梯
    webpack起步
    Centos7安装nginx
    Centos7安装nacos
    Centos7安装java和maven
    centos7安装fastDFS
    aop中获取请求消息和属性
    数据库面对高并发的思路
  • 原文地址:https://www.cnblogs.com/ceet/p/9989469.html
Copyright © 2011-2022 走看看