2014-09-08 3 views
0
searchSQL: "SELECT * FROM FOLIO where productID IN(?)", 

search: function(q, productIds) { 
    var self = this; 
    this.database.transaction(function(transaction) { 
     transaction.executeSql(self.searchSQL, [productIds.join(", ")], function(transaction, resultSet){self.search_transactionComplete(transaction, resultSet)}, function(error){self.searchTransactionError()}); 
    }); 
}, 

search_transactionComplete: function(transaction, resultSet) { 
    console.log(transaction, resultSet); 
}, 

searchTransactionError: function(error) {console.log(this.constructor.NAME, this.searchSQL); console.log(error);}, 

Может ли кто-нибудь предложить, как я могу использовать оператор IN с переданным массивом (productIds) в WebSQL/Javascript.Использование оператора In с WebSQL с массивом

ответ

0

Я понимаю, что это, вероятно, немного поздно, но в случае, если кто-то еще сталкивается с этой проблемой, вот мое хакерское обходное решение. Я знаю, что это не идеально, но, насколько я знаю, webSQL не поддерживает параметры массива; мое решение динамически генерирует sql и передает каждый элемент в массиве продуктов в виде отдельного параметра.

search: function(q, productIds) { 
var self = this; 

if (productIds.length == 0) { 
    //no-op 
} else { 
    //make a copy of the productIds array 
    var paramList = productIds.slice(); 

    //replace all values in the array with a parameter-placeholder 
    for (var ii = 0; ii < paramList.length; ii++) { 
     paramList[ii] = '?'; 
    } 

    //convert the list of parameters to a comma-delimited string 
    var sParamList = paramList.join(); 

    //we know sParamList is clean, it can only contain commas and question marks 
    var hackySql = "SELECT * FROM FOLIO where productID IN(" + sParamList + ")"; 

    //hackySQL looks like: "SELECT * FROM FOLIO WHERE productID IN(?,?,?,?,?,?)" 

    this.database.transaction(function(transaction) { 
     transaction.executeSql(hackySql, productIds, function(transaction, resultSet){self.search_transactionComplete(transaction, resultSet)}, function(error){self.searchTransactionError()}); 
    }) 
}} 

Надеюсь, это поможет кому-то еще!

Смежные вопросы