在sqlite3(节点包)中,如何按顺序运行多个查询? [英] in sqlite3 (node package), how to run multiple queries by sequence?

查看:21
本文介绍了在sqlite3(节点包)中,如何按顺序运行多个查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用这个包:sqlite3 来操作数据库查询,代码如下:

单个查询很简单:

 var sqlite3 = require('sqlite3').verbose();让 db = new sqlite3.Database('database.sqlite3');让 entity_1_name = ''db.serialize(function(){db.get('select * from table1 where id = 1', function(error, row){entity_1_name = row.name})})db.close()

但是如何按顺序执行多个查询呢?(例如,我想运行 query1,然后是 query2,然后是 query3)
就像:

 var sqlite3 = require('sqlite3').verbose();让 db = new sqlite3.Database('database.sqlite3');让 entity_1_name = ''让 entity_2_name = ''db.serialize(function(){//这是查询 1db.get('select * from table1 where id = 1', [], function(error, row){entity_1_name = row.name})//这是查询 2db.get('select * from table2 where dependency_column_name = ' + entity_1_name, function(error,row){//这个 sql 返回空值,因为当这个查询被执行时,变量entity_1_name"被不是由 query1 确定的.})})db.close()

解决方案

OK,最后我用了 promise + async + await完成它.

第一步.定义一个函数 return new Promise()

 do_query_1(material_name){//1. 返回这个新的 Promise()返回新的承诺((解决,拒绝)=> {让 db = this.$database_tool.get_db()让那个=这个db.serialize(function(){db.get(`select * from table1 where id = 1`, [], function(error, row){//2. 这就是重点,把任何你想要的结果都放到 resolve() 中解决(row.id)})})db.close();})},

步骤 2.定义一个async函数,调用Step1中定义的方法.

<预><代码>异步 do_query_2(){让那个=这个//其他行被省略.//这里,使用 await 从 STEP1 获取结果.让 entity_1_name = await that.get_material_id(row.material_name)db.serialize(function(){let sql = `'select * from table2 where dependency_column_name = ' + entity_1_name`db.run(sql)})db.close();},

步骤 3.以正常方式调用do_query_2():

do_query_2()

就是这样!

I am using this pakcage: sqlite3 to manipulate database queries, code like this:

single query is quit simple:

 var sqlite3 = require('sqlite3').verbose();
 let db = new sqlite3.Database('database.sqlite3');
 let entity_1_name = ''
 db.serialize(function(){
   db.get('select * from table1 where id = 1', function(error, row){
      entity_1_name = row.name
   })
 })
 db.close()

But how to execute multiple queries and in sequence? (e.g. I want to run query1, then query2, then query3 )
just like:

 var sqlite3 = require('sqlite3').verbose();
 let db = new sqlite3.Database('database.sqlite3');
 let entity_1_name = ''
 let entity_2_name = ''
 db.serialize(function(){

   // this is query1
   db.get('select * from table1 where id = 1', [], function(error, row){
      entity_1_name = row.name
   })

   // this is query2
   db.get('select * from table2 where dependency_column_name = ' + entity_1_name, function(error,row){
      // this sql returns null value, because when this query was executed, the variable "entity_1_name" was not determined by query1.
   })

 })


 db.close()

解决方案

OK, at last, I used promise + async + await to make it done.

Step1. define a function return new Promise()

      do_query_1(material_name){
        // 1. return this new Promise() 
        return new Promise( (resolve, reject) => {
          let db = this.$database_tool.get_db()
          let that = this
          db.serialize(function(){
            db.get(`select * from table1 where id = 1`, [], function(error, row){
              // 2. this is the point, put anything you want to result to resolve()
              resolve(row.id)
            })
          })
          db.close();

        })
      },

Step2. define a async function, to call the method defined in Step1.


      async do_query_2(){
        let that = this
        // other lines was omitted.
        // HERE , use await to get the result from STEP1. 
        let entity_1_name = await that.get_material_id(row.material_name)

        db.serialize(function(){
          let sql = `'select * from table2 where dependency_column_name = ' + entity_1_name`

          db.run(sql)
        })
        db.close();
      },

Step3. call do_query_2() in normal way:

do_query_2()

That's it!

这篇关于在sqlite3(节点包)中,如何按顺序运行多个查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆