2013-04-09 3 views
0

소개폰갭 저장

내가 하루 종일했지만 내 폰갭의 aplication에서 일어나는 뭐죠 난 그냥 이해가 안 돼요.

내 휴대 전화에서 로컬 저장소를 사용하여 웹 페이지에서 검색된 뉴스 메시지를 저장하는 중입니다. 사용자가 콘텐츠를 오프라인에서 볼 수 있기를 원하기 때문에이 작업을 수행하고 있습니다.

앱이 온라인 상태 일 때 앱은 마지막 업데이트 날짜를 웹 사이트에 전송하기 만하면 웹 사이트는 변경된 레코드 만 다시 전송하고 앱은이를 로컬 db에 다시 저장합니다.

이 모두는 처음으로 데이터를로드 할 때 꽤 잘 작동합니다. 나는 매우 처음으로 응용 프로그램을 시작하면

문제

, 그것은 웹 사이트에서 사용할 수있는 모든 레코드 데이터베이스를 채울 필요가있다. (201 rows) 그러나 39 개 이상의 메시지를로드하려고하면 정의되지 않은 SQL 오류가 발생합니다.

그러나 39 개의 결과 만 전송되도록 PHP 스크립트를 변경할 수 있습니다. 앱이 처음으로로드 된 후 스크립트를 다시 변경하여 모든 레코드를 전송할 수 있으며 완벽하게 작동합니다.

내 응용 프로그램을 시작할 때마다 문제가 더욱 복잡해지기 때문에 모든 테이블이 삭제되고 다시 작성됩니다 (물론 개발 목적으로 만 사용되며 드롭은 최종 버전에 포함되지 않습니다). 응용 프로그램을 다시 시작하면 아무런 문제없이 201 개의 레코드가로드됩니다.

다시 문제를 재현하려면 응용 프로그램을 완전히 제거한 다음 다시 설치해야합니다. 시작시

var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)'; 
var len = contents.length; 
for (var i=0; i<len; i++){ 
    tx.executeSql(q, [contents[i].id, contents[i].title, contents[i].introtext, contents[i].catid]); 
} 

코드 : 결과를 저장하기위한

코드

코드 내가이기 때문에

tx.executeSql('DROP TABLE IF EXISTS NIEUWS'); 
tx.executeSql('CREATE TABLE IF NOT EXISTS NIEUWS (id PRIMARY KEY, title TEXT, introtext TEXT, catid INTEGER)'); 

난 정말이 문제는 몇 가지로 의미가 희망 지금 당장 완전히 잃어 버렸어.

미리 감사드립니다.

편집 1 ID와 제목 만 저장하려고했는데 아무 문제없이 작동합니다. 2

var q = 'INSERT OR REPLACE INTO NIEUWS (id, title) VALUES (?, ?)'; 
var len = contents.length; 
for (var i=0; i<len; i++){ 
    tx.executeSql(q, [contents[i].id, contents[i].title]); 
} 

편집 콜백을 기다리는 코드를 다시 작성, 같은 오류가 여전히 존재합니다.

function HandleNewsQuery(tx){ 
    var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)'; 
    if(c < contents.length){ 
     tx.executeSql(q, [contents[c].id, contents[c].title, contents[c].introtext, contents[c].catid], HandleNewsQuery, errorCB); 
     c++; 
    } 
} 
+0

가능하게 관련이 : HTTP : http://stackoverflow.com/questions/4825455/web-sql-database-javascript-loop – pawel

답변

0

이 문제를 3 일간 살펴본 결과 드디어 해결책을 찾았습니다. ,

var db = window.openDatabase("test", "1.0", "Test DB", 200000); 

크기는 바이트로 선언되어 있으므로 실제로이 데이터베이스는 내가이 변경에만 2백킬로바이트

했다 : 내 데이터베이스 충분히 큰 선언되지 않은 20메가바이트입니다

var db = window.openDatabase("test", "1.0", "Test DB", 20000000); 

.

나는 왜 문제가 데이터의 첫 번째로드에만 존재했는지 이해할 수 없다.

모든 생각에 감사드립니다.

0

난 당신이 이전의 콜백으로 SQL 문을 다음, 대신에 '에 대한'그들을 통해 반복 할 것 같아요.

지금 예를 제공 할 수 없습니다. 죄송합니다.

+0

거기에 자신의 문서에서 그들은 또한 루프를 사용, 난에서이 방법을 가지고 무엇을 먹으 렴 : //docs.phonegap.com/en/2.5.0/cordova_storage_storage.mst.html#SQLResultSetRowList –

+1

PhoneGap 문서에서 결과는 데이터베이스 쿼리의 콜백 함수에서 결과 집합에서 반복됩니다. 귀하의 경우에는 여러 데이터베이스 쿼리를 반복하고 있습니다. 엄청난 차이가 있습니다. – zvona

+0

맞습니다. 코드를 다시 작성했습니다. 첫 번째 게시물 (편집 2)에 있습니다. 그러나 39 개 이상의 게시물을로드하려고하면 오류가 여전히 존재합니다. –