2011-02-07 1 views
0

데이터가 없습니다. 동일한 데이터베이스에서 다른 테이블의 업데이트를 실행해도 문제가 없었으므로 연결이 잘된 것 같습니다. 나는 테이블에 삽입을 실행할 때, 나는 모든 데이터가 삽입받지 못했습니다 및 에러/예외가 발생하지 않습니다되고있다. 그래서 무슨 일이 일어나고 있는지 혼란스러워. 여기 내 테이블 구조입니다SQL 인서트 에러없이 아직 표 I 티탄 모바일 sqlite가 사용하고

CREATE TABLE events (
gCal_uid VARCHAR, 
title VARCHAR, 
content VARCHAR, 
location VARCHAR, 
startTime VARCHAR, 
endTime VARCHAR, 
published VARCHAR, 
updated VARCHAR, 
eventStatus VARCHAR 
); 

여기 코드입니다. 아래 insert 문을 볼 수 있습니다. 변수의 출력에는 모두 데이터가 들어 있습니다. 아마도 내 구문이 잘못 되었나요?

var db = Ti.Database.open('content'); 
Titanium.API.info(" number or results returned = " + cal.feed.entry.length); 
var i; 
for (i=0; i < cal.feed.entry.length; i++){ 
    var e = cal.feed.entry[i]; 

    var calUid = e.gCal$uid.value; 
    var title = e.title.$t; 
    var content = e.content.$t; 
    var location = e.gd$where.valueString; 
    var startTime = e.gd$when[0].startTime; 
    var endTime = e.gd$when[0].endTime; 
    var published = e.published.$t; 
    var updated = e.updated.$t; 
    var eventStatus = e.gd$eventStatus.value; 

    Titanium.API.info(calUid + title + content + location + startTime + endTime + published + updated + eventStatus); 

    var theData = db.execute('INSERT INTO events (gCal_uid, title, content, location, startTime, endTime, published, updated, eventStatus) VALUES("'+calUid+'","'+title+'", "'+content+'", "'+location+'", "'+startTime+'", "'+endTime+'", "'+published+'", "'+updated+'", "'+eventStatus+'")'); 
    theData; 
    Ti.API.info("rows inserted" + i); 
} 
Ti.API.info("closed the db"); 
db.close(); 
+1

하십시오 !!!!! SQL 문을 준비 할 때 가치를 잃어 버리십시오! 응답에 대해 – Benoit

답변

1

SQL은 작은 따옴표를 사용합니다. Javascript는 둘 중 하나를 사용합니다.

당신은 결과 SQL은 당신이 작성했던 것처럼되고 싶어

INSERT info foo (a,b) values ('a value', 'b value') 

간단한 더-올바른 동등한은 다음과 같습니다

var theData = db.execute("INSERT INTO events (gCal_uid, title, content, location, startTime, endTime, published, updated, eventStatus) VALUES('"+calUid+"','"+title+"','"+content+"','"+location+"','"+startTime+"','"+endTime+"','"+published+"','"+updated+"','"+eventStatus+"')"); 

하지만 당신은 정말 피하기 위해 매개 변수 대체를 사용하려면 분사 문제 및 인용 오류

var theData = db.execute("INSERT INTO events (gCal_uid, title, content, location, startTime, endTime, published, updated, eventStatus) values (?,?,?,?,?,?,?,?,?)", calUid, title, content, location, startTime, endTime, published, updated, eventStatus); 
1

SQL 문자열 리터럴은 큰 따옴표가 아닌 작은 따옴표로 묶어야합니다.

INSERT INTO foo (a) VALUES("a"); 

은 올바른 설명이 아닙니다.

INSERT INTO foo (a) VALUES('a'); 

은 올바른 SQL 문입니다.

또한 당신이 무엇을 삽입하는 것은 (당신이하지 않는)가 제대로입니다 탈출 있는지 확인해야합니다. 그러므로 당신은 SQL 문의 나머지 부분과을 연결하기 전에 변수 내부의 모든 단일 따옴표를 두 배로해야합니다.

+0

주셔서 감사합니다. 나는이 튜토리얼의 예제를 기초로하고있다. http://mobile.tutsplus.com/tutorials/appcelerator/titanium-mobile-database-driven-tables-with-sqlite-part-2/ 나는 기회가 없었다. 이중 따옴표를 제거하여 코드를 변경하고 검사 할 수는 있지만 코드와 코드의 차이점이나 수행중인 작업이 무엇인지 알 수 있다면 도움이 될 것입니다. 나는 아직도 SQL에 다소 익숙하다. 그래서 나는 당신의 말을 제대로 이해하는지 확실히하고 싶다. 도와 주셔서 감사합니다. – bdizzle