Node.js中使用数据库详解编程语言

在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

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论