nodejs中的variablessqlite3查询

我使用node.js构build了一个简单的表单,要求提供您期望的内容: – 名字 – 姓氏 – 地址

并使用名为firstName,lastName,address的字段对sqlite3数据库进行查询。 我想混合和匹配查询,虽然 – 你可以search只是姓氏或名字与姓氏或姓氏与部分街道地址等

为每个案件写单独的查询将是烦人的,但我不知道该怎么办。 在代码中,如果我input名字或姓氏,以下工作:

db.serialize(function() { db.each("SELECT rowid AS id, lastName, firstName FROM county WHERE firstName = ? OR lastName = ?", firstName, lastName, function(err, row) { console.log(row.id + ": " + row.firstName + ' ' + row.lastName); } } 

但是,如果我input名字和姓氏,我希望这是AND,而不是只返回两个匹配的行。 如果我在该子句中执行“与”,那么如果我将其中一个字段留空,它将不会返回任何内容。

我只是缺less构build我的查询技巧?

谢谢!

我认为最好在代码中实现这一点。 像这样的东西:

 var sqlite3 = require('sqlite3').verbose(), db = new sqlite3.Database('peeps.db'); var runQuery = function(request) { var select = 'select rowid AS id, firstName, lastName from country where ', query, params = []; if (request.first && request.last) { query = select + "firstName=? and lastName=?" params.push( request.first, request.last ); } else if (request.first) { query = select + "firstName=?" params.push( request.first ); } else if (request.last) { query = select + "lastName=?" params.push( request.last ); } if (request.address) { params.push( request.address ); if (!query) { query = select + " address like ?"; } else { query = query + " and address like ?"; } } db.each( query, params, function(err, row) { console.log( 'id:', row.id, row.firstName, row.lastName ); }); }; var createTestData = function() { var stmt = db.prepare('insert into country values (?, ?, ?)'); stmt.run('john', 'smith', '123 state street'); stmt.run('jane', 'doe', '400 doe street'); stmt.run('jeff', 'lebowski', 'dude ave, dudeville'); stmt.finalize(); }; db.serialize(function() { db.run('create table if not exists country( firstName text, lastName text, address text )'); // createTestData(); var searches = [ { first:'john', last:'smith' }, { first:'jane' }, { last:'lebowski' }, { address:'%street%' } ]; searches.forEach(function(request) { runQuery( request ); }); }); db.close(); 

这不是我想要的面向对象,但是它演示了如何为各种查询参数构造SQL语句。