2012-03-26 4 views
0

우리는이 같은 특정 행 요청할 수 배열에서 행을 얻을 수있는 선택 사용 websql :는 websql에서

tx.executeSql('SELECT * FROM tblSettings where id = ?', [id], function(tx, rs){ 
    // do stuff with the resultset. 
}, 
function errorHandler(tx, e){ 
    // do something upon error. 
    console.warn('SQL Error: ', e); 
}); 

그러나, 내가 아는 일반 SQL을하고 난 요청할 수 있어야한다 생각

var arr = [1, 2, 3]; 
tx.executeSql('SELECT * FROM tblSettings where id in (?)', [arr], function(tx, rs){ 
    // do stuff with the resultset. 
}, 
function errorHandler(tx, e){ 
    // do something upon error. 
    console.warn('SQL Error: ', e); 
}); 

하지만 결과가 없으면 결과는 항상 비어 있습니다. arr[arr]을 제거하면 sql은 다양한 양의 매개 변수를 가져 오므로 [arr]이어야합니다. 그렇지 않으면 물음표의 역동적 인 양을 추가해야합니다 (배열에 ID가있는만큼).

아무도 내가 잘못하고있는 것을 볼 수 있습니까?

답변

6

실제로 배열에있는 모든 항목에 물음표를 수동으로 추가하는 것보다 다른 해결책은 없습니다.

대한 추가 정보를 원하시면 여기

var q = ""; 
for each (var i in labels) 
    q += (q == "" ? "" : ", ") + "?"; 

// later to be used as such: 
t.executeSql('SELECT id FROM docs WHERE label IN (' + q + ')', labels, function (t, d) { 
    // do stuff with result... 
}); 

을에는 w3.org의 사양에 실제로 : http://www.w3.org/TR/webdatabase/#introduction를 (소개의 말은)

그러나, 그 순간에 내가 생성하는 도우미 함수를 생성 나를위한 그런 문자열 위의 것보다 좋을 수도,하지 않을 수도, 나는 어떤 성능 테스트를 수행하지 않았습니다.

이 지금

var createParamString = function(arr){ 
    return _(arr).map(function(){ return "?"; }).join(','); 
} 

// when called like this: 
createparamString([1,2,3,4,5]); // >> returns ?,?,?,?,? 

이 그러나 우리는 우리의 프로젝트에있는 underscore.js 라이브러리를 사용하게 사용하는 것입니다.

0

좋은 답변입니다. 공식 문서에서 설명을 읽는 것은 흥미 롭습니다.

이 질문이 2012 년에 답변 된 것을 볼 수 있습니다. Google 37에서 정확히 recommened대로 시도했는데 이것이 내가 가진 것입니다.

데이터 입력에 :

enter image description here

는 그래서 많은 입력 매개 변수가있는만큼 많은 질문 표시를 허용합니다

enter image description here

크롬 불평 (나는 검은 색 연필로 그들을 설명) 주어진.

var activeItemIds = [1,2,3]; 
    var q = ""; 
    for (var i=0; i< activeItemIds.length; i++) { 
     q += '"' + activeItemIds[i] + '", '; 
    }   
    q= q.substring(0, q.length - 2); 

    var query = 'SELECT "id" FROM "products" WHERE "id" IN (' + q + ')'; 
    _db.transaction(function (tx) { 
     tx.executeSql(query, [], function (tx, results1) { 
      console.log(results1); 
      debugger; 

     }, function (a, b) { 
      console.warn(a); 
      console.warn(b); 
     }) 
    }) 
: (우리가 배열을 전달하지만 그것은 하나 개의 매개 변수로 처리됩니다 것을주의하자)

은 결국 나는이 솔루션에 와서