在mysql模块中,可以使用createConnection方法创建一个与数据库连接的Connection对象。
var connection = mysql.createConnection(options);
实际使用中
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: 3306,
database: 'mysql',
user: 'sysuzhyupeng',
password: ''
})
connection.connect(function(err){
if(err) console.log(...);
else {
console.log('连接成功');
// end方法在向数据库服务器发送用于关闭连接的COM_QUIT数据包之前江所有被挂起的查询操作执行完毕,而destroy不执行被挂起的查询操作
connection.end(function(err){ ... })
}
})
使用Connection对象的query方法统一执行数据的增删改查
connection.query(sql, [parameters], [callback]);
为了防止SQL注入攻击,需要使用该对象的escape方法对输入数据进行处理
var query = 'SELECT * FROM posts WHERE title=' +
connection.escape('hello');
可以在查询语句中使用?? 占位符来为SQL标识符使用参数
connection.query('SELECT * FROM ?? WHERE title= ?', ['users', userId]);
使用数据流方式查询数据
Connection对象的query方法返回一个可用于处理数据流数据的对象,如果使用query方法返回的对象,那么query方法中不能使用callback参数值指定回调函数。
var out = fs.createWriteStream('./message.txt');
var query = connection.query('select * from users');
query.on('error', function(err){})
.on('field', function(field){
//读取到所有字段后将字段写入流
out.write(...)
})
.on('result', function(row){
// 暂停读取
connection.pause();
out.write(row.id, function(err){
connection.resume();
})
})
当读取该表中的一条数据之后暂停读取后续数据,然后将读取到的记录写入文件中,然后使用resume 方法恢复读取后续数据。在对读取到的记录执行一个耗时较长的IO操作时,Connection对象的pause和resume方法可以帮助减轻读取大数据量时的压力。
创建连接池
如果为每一个接受到的客户端请求都建议一个或多个数据库连接,将严重降低性能。因此通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要使用时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,可以从连接池中取出连接并重新利用
在mysql模块中,可以使用createPool创建连接池
var pool = mysql.createPool(options);
在建立连接池之后,不需要显示地使用createConnection方法连接,可以直接使用连接池对象的getConnection 方法。
var mysql = require('mysql');
var pool = mysql.createPool({
host: 'localhost',
port: 3306,
database: 'mysql',
user: 'sysuzhyupeng',
password: ''
});
pool.getConnection(function(err, connnection){
if(err) { ... }
else {
//和原来使用方法相同
connection.query(...)
}
})
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/13490.html