Node.js连接数据库

连接MySQL数据库

在学习Java的JDBC时, 需要导入一个第三方的驱动jar包 , 在Node.js中也差不多 , 需要导入mysql模块

为什么需要导入模块

首先你要知道市面上大大小小的数据库产品几十款 , 每一款的开发商都不一样 , 每一款数据库的底层实现也是不一样 .

假如让每一个程序员都根据每一款数据库产品写一套API , 肯定是不太现实的 .

所以Node.js官方给出API的设计规范 , 每一个厂商都根据设计规范自主开发一套API , 并封装成模块.

这样, 程序员连接你家的数据库产品时 , 只需要导入这些封装好的API即可.

在Node.js中操作数据库

导入模块

//安装模块
npm i mysql
//导入模块
const mysql = require('mysql');

获取链接

首先通过createConnection()方法注册链接 , 返回一个链接的对象

接着调用此对象的connect() 向数据库发起链接

//返回一个链接对象
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123123',
    database: 'my_db'
})
connection.connect()

参数名

  • host 主机域名
  • user 用户名
  • password 数据库密码
  • database 指明我要连接哪一个库

在使用connection.connect()连接数据库时,可能连接不上 , 这是就会报错,可以使用回调函数来处理

connection.connect(function(err){
    if(err)
        return console.log('连接失败!'+err.message);
    console.log('连接成功')
})

操作数据库

通过connection.query()来执行sql语句

connection.query('select * from user',function(err,results){
    //查询失败
    if(err)
        return console.log(err.message)
   //查询成功
    console.log(results)
})

第一个参数是待执行的sql语句

第二个参数是回调函数,这个回调函数的两个参数

  1. 第一个参数err是一个错误对象, 当sql语句执行失败时, 会生成一个错误对象 , 传递给回调函数, 等待处理; 当sql执行成功时, err = null;
  2. 第二个参数是results , sql操作成功后会返回一个结果集 , 当sql语句执行失败时, results=null

若执行的是查询操作 , results为一个数组 , 一行为一个单位

image-20220505222329831

其他的操作 , results则为一个包含执行后状态的对象

image-20220505222351667

预编译语句

前面的sql语句是通过字符串直接写好的 , sql语句是写死的 , 不能再变了 ,如果向再次执行类似的语句还要重新写一遍

这时候可以使用预编译的语句

var sqlStr = 'insert into users values(?,?,?)'

像这样, 在参数的位置使用问号?充当一个占位符 , 后期使用时只需要替换问号?的地方即可

在调用connection.query()方法时 , 需要传入预编译的sql语句 ,

如果只有一个?占位符, 那么第二个参数可以是数值型, 字符串 , 对象等

var sqlStr = 'select * from users where id = ?'
connection.query(sqlStr,2,function(){
    if(err)
        return console.log('操作失败')
    console.log(results)
})

如果有多个?占位符, 可以传入一个数组, 数组内的元素与占位符一一对应

var sqlStr = 'insert into users values(?,?,?)'
connection.query(sqlStr,[5,'小王','10086'],function(err,result){
    if(err)
        return console.log('操作失败')
   	if(err.affectedRows==1)
        console.log('插入数据成功')
})

插入数据的快捷方式

如果数据对象的每个属性和表中的字段一一对应 , 那么可以直接传入一个对象

var sqlStr = 'insert into users set ?';
var u{
    id: 10,
    uname:'小李',
    ph_num: '10000'    
}
connection.query(sqlStr,u,(err,results)=>{
	if(err)
        return console.log('操作失败')
    console.log(results);
}
)

关闭链接

当数据库操作完成之后, 要及时关闭链接 , 防止连接占用大量的资源

调用connection.end()方法来关闭连接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值