nodejs连接MySQL,做简单的CRUD

原文链接:http://120.24.90.140:2368/nodejs-dowith-database/

参考网址

  nodejs是如此强大!!!直接操作数据库也非常简单、快……

使用实例

测试使用的数据库
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `timestamp` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `user`
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES ('1', 'ubuntuvim', '2015-11-22 17:50:30');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
测试代码
获取数据库链接
/**
 * 后台服务,链接MySQL获取项目数据
 */
var mysql = require('mysql');  // 引入MySQL模块

var conn = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: '',
    // debug: true,
    debug: ['RowDataPacket'],
    database: 'todos'
});
使用连接池
//  使用连接池
var pool = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: '',
    // debug: true,
    database: 'todos'
});
pool.getConnection(function(err, conn) {
    conn.query('select * from user', function(err, rows) {
        console.log('>>>>>>>>>>> 使用连接池 >>>>>>>>>>>>>>>>>');
        for (var i = 0; i < rows.length; i++) {
            console.log('rows[i].id = ' + rows[i].id);
            console.log('rows[i].username = ' + rows[i].username);
            console.log('rows[i].timestamp = ' + rows[i].timestamp);
        }
        conn.release();  //释放连接,放回到连接池

        //  甚至可以直接关闭连接池
        conn.destroy();
    });
});
查询所有数据
conn.connect();  //打开链接

conn.query('select * from user', function(err, rows, fields) {
    if (err) throw err;

    console.log('========= 查询所有数据 ===========');
    for (var i = 0; i < rows.length; i++) {
        console.log('rows[i].id = ' + rows[i].id);
        console.log('rows[i].username = ' + rows[i].username);
        console.log('rows[i].timestamp = ' + rows[i].timestamp);
    }
    // console.log('rows ' + rows[0].username);
    // console.log('fields ' + fields);
});

conn.end();  //关闭连接
多表关联查询
//  多表连接查询
var options = { sql: 'select * from user u, todoItem td where u.id = td.user', nestTables: '_' };
conn.connect();  //打开链接
conn.query(options, function(err, results) {
    if (err) throw err;

    console.log('---------------- 多表连接查询 -------------------');
    // console.log('results = ' + results);
    // console.log('results[0] = ' + results[0]);
    //  如果查询的时候使用nestTables: '_'分割属性名,那么查询也需要带表明前缀
    //  debug: ['RowDataPacket'] 连接时打开debug可以看到 打印的RowDataPacket信息
    console.log('results[0].username = ' + results[0].u_username);
});
conn.end();
查询某个字段值
//  根据属性查
conn.connect();  //打开数据库连接
//  与jdbc操作数据库类似,也可以使用占位符
conn.query('select username from user where id = ?', [1], function(err, results, fields) {
    if (err) throw err;

    console.log("-------------- 查询某个字段值 ----------------");
    for (var i = 0; i < results.length; i++) {
        console.log('username = ' + results[i].username);
    }

    //  field 包含的属性
    // [ { catalog: 'def',
    //     db: 'todos',
    //     table: 'user',
    //     orgTable: 'user',
    //     name: 'username',
    //     orgName: 'username',
    //     charsetNr: 33,
    //     length: 150,
    //     type: 253,
    //     flags: 0,
    //     decimals: 0,
    //     default: undefined,
    //     zeroFill: false,
    //     protocol41: true } ]
    //
    console.log("-------------- 字段名称----------");
    for (var i = 0; i < fields.length; i++) {
        console.log('fields = ' + fields[i].name);
    }

});
conn.end();  //关闭MySQL连接
插入数据
// 插入数据
console.log('------------- 插入数据 ------------');
conn.connect();  //打开连接
var user = { username: 'add test', timestamp: new Date() };
var query = conn.query('insert into user SET ?', user, function(err, result) {
    if (err) throw err;
    //  返回记录的id值
    console.log('result = ' + result.insertId);
});
// 执行的sql为:insert into user SET `username` = 'add test', `timestamp` = '2015-11-22 22:23:36.768'
// 注意与常规insert语句语法的区别
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接
更新数据
console.log('------------- 更新数据 ------------');
conn.connect();  //打开连接
var data = [ 'update test', 4 ];  //需要跟占位符的顺序一致
var query = conn.query('UPDATE user SET username = ? where id = ?', data, function(err, result) {
    if (err) throw err;
    //  返回被更新的行数
    console.log('成功更新【' + result.changedRows + "】行数据。");
});
// 执行的sql为:UPDATE user SET username = 'update test' where id = 4
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接
删除数据
console.log('------------- 删除数据 ------------');
conn.connect();  //打开连接
var data = [ 4 ];  //需要跟占位符的顺序一致
var query = conn.query('delete user where id = ?', data, function(err, result) {
    if (err) throw err;
    //  返回被更新的行数
    console.log('成功删除【' + result.affectedRows + "】行数据。");
});
// 执行的sql为:delete from user where id = 4
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接

注意更新和删除获取的影响行数所使用的属性是不一样的。更新使用changeRows而删除使用affectedRows

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Node.js连接MySQL数据库可以使用一些库,比如mysql`、`mysql2`、`sequelize`。以下是使用`mysql2`库的示代码: 首先,确保已经安装了`mysql2`库。可以使用以下命令进行安: ```shell npm mysql2 ``` 然后,在你的代码文件中引入`mysql2`库和创建数据库连接的配置信息,如下所示: ```javascript const mysql = require('mysql2'); // 创建数据库连接配置 const connection = mysql.createConnection({ host: 'localhost', // 数据库主机名 user: 'your_username', // 数据库用户名 password: 'your_password', // 数据库密码 database: 'your_database' // 数据库名称 }); // 连接数据库 connection.connect(function(err) { if (err) { console.error('Error connecting to MySQL database: ' + err.stack); return; } console.log('Connected to MySQL database as id ' + connection.threadId); }); // 执行SQL查询 connection.query('SELECT * FROM your_table', function(err, results, fields) { if (err) { console.error('Error executing query: ' + err.stack); return; } // 处理查询结果 console.log(results); }); // 关闭数据库连接 connection.end(); ``` 在上面的示例中,将`your_username`、`your_password`和`your_database`替换为你的MySQL数据库的实际信息。然后,你可以根据需要执行SQL查询并处理结果。 请注意,在实际开发中,你可能会使用连接池来管理数据库连接,以提高性能和可伸缩性。以上只是一个简单的示例,你可以根据自己的需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值