我希望使用NodeJS与MySQL数据库的连接池。根据文档,有两种方法可以做到这一点:我明确地从池中获取连接,使用它并释放它:
var pool = require('mysql').createPool(opts);
pool.getConnection(function(err, conn) {
conn.query('select 1+1', function(err, res) {
conn.release();
});
});
或者我可以这样使用它:
var mysql = require('mysql');
var pool = mysql.createPool({opts});
pool.query('select 1+1', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
如果我使用第二个选项,是否意味着连接会自动从池中拉出,使用和释放?如果是这样,是否有理由使用第一种方法?
答案 0 :(得分:0)
万一其他人偶然发现:
使用pool.query时,实际上是在调用快捷方式,该快捷方式的作用与第一个示例相同。
来自readme:
这是pool.getConnection()-> connection.query()-> connection.release()代码流的快捷方式。使用pool.getConnection()对于共享后续查询的连接状态很有用。这是因为两次调用pool.query()可能会使用两个不同的连接并并行运行。
是的,第二个也正在调用connection.release(),您只需要键入它即可。
答案 1 :(得分:0)
是的,第二个意思是池负责获取下一个空闲连接,对此进行查询,然后再次释放它。您可以将其用于没有依赖项的“一枪” 查询。
如果要执行多个相互依赖的查询,请使用第一个查询。连接包含某些状态,例如锁,事务,编码,时区,变量等。
下面是一个更改使用的时区的示例:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Onload this document will Translate to French.<br><br>
<button id="toggleLang">Toggle language</button>
<div data-translate="0">Download - Document</div><br><br>
<div data-translate="1">It's not a document</div><br><br>
<div data-translate="2">Translate this, while you<br />are fast asleep.</div>