2011-07-29 4 views
0

저는 SQL에 익숙하지 않지만 jquery $ (document) .ready 문에서 javascript를 사용하여 html5 sql 저장소에 데이터베이스를 설정하려고합니다. 나는 크롬과 파이어 폭스에서 테스트를 해왔다.하지만 파이어 폭스는 전혀 작동하지 않으며, 크롬에있는 문제는 정적 값이라면 기본값을 잘 설정할 수 있다는 것이다. 그러나 시도 할 때 함수를 사용하면 일이 잘 풀리지 않습니다. 실제로이 함수가 매번 함수를 호출하기를 원할 때만이 코드가 기본 함수를 호출한다고 생각합니다. 그러나, 내가하려고 할 때 ErrorDB 함수가 호출됩니다. 여기에 코드입니다 : 나는 그건 내가 잘못된 데이터 유형뿐만 아니라 몇 가지 다른 일을 한 것으로하는 문제에 대한 해결책의 무언가를 발견javascript의 함수가있는 sql 열의 기본값

$(document).ready(function() 
{ 
var db; 
try{if(window.openDatabase){ 
    db =openDatabase("fetchnotes", "1.0","fetchnotesDB",1000000); 
    if (!db) {alert("failed to load database on disk"); return;}; 
    }  
      else{ 
     alert("could not open database."); 
     return; 
    } 

}catch(err){alert("error "+err); return;} 
db.transaction(initializeDB, errorDB); 
}); 
function initializeDB(tx){ 
    tx.executeSql('Drop TABLE IF EXISTS NOTES'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS'+ 
    ' NOTES(ID int primary key,NoteText, LastModified Date NOT NULL DEFAULT "' 
      +defaultLastModified()+ '")'); 
    tx.executeSql('INSERT INTO NOTES (ID, NoteText) VALUES (1, "make a better database") '); 
} 

function errorDB(tx,err) 
{ 
    alert("error "+err);   
} 
function defaultLastModified() 
{ 
    var result= new Date(); 
    return result;  
} 

좋아요. 수정 된 코드에 대한이 여기에 있습니다 : 당신이 기술적으로 그것을 밖으로 떠나는 것은 시간이 SQL 표준 인 GMT에있을 것입니다 것을 의미의 '의 현지을'필요하지 않습니다

tx.executeSql("CREATE TABLE IF NOT EXISTS"+ 
    " NOTES(ID INTEGER PRIMARY KEY,NoteText TEXT ," + 
    "LastModified TIMESTAMP DEFAULT (datetime('now','localtime')));"); 

. 그러나 나는 여전히 사용자 정의 함수를 기본 값으로 가져 오는 방법을 여전히 모르고 있는데, 이것이 여전히 내 주요 질문입니다.

+0

공개 애플리케이션입니까? – hsz

답변

0

내가 잘못 생각한 세 가지가 있습니다.

  1. 은 내가 JS 날짜 객체는 SQL 쿼리 (... "' + defaultLastModified() + "' ...)에 맞지 않는 확신 해요.
  2. 적합하면 다음 중 하나를 생각하면 작동하지 않습니다. defaultLastModified()now을 반환하므로 2 주 후에 레코드를 추가하면 레코드가 추가되기 2 주 전인 now이 계속 포함됩니다.
  3. (SQL에서) 날짜를 기본값으로 설정하지 않았습니까? (자동으로 실제 now을 채 웁니다.)?
+0

1. 나는 그것이 여전히 날짜 또는 단지 문자열인지 확실하지 않지만,이 코드는 날짜처럼 보이는 데이터베이스를 채울 것이다. 2. 나는이 코드가 내가 원하는 방식으로 작동한다고 생각하지 않는다. 3. 내가 말할 수있는 한, 자동으로 호출되는 기본 날짜 값이 없습니다. 그런 것과 비슷한 것을 찾으려고 시도한 모든 것이 LastModified 필드를 비워 둡니다. 응답 해 주셔서 감사합니다. – nadirku

0

제 생각에 executeSql은 WebKit 기반 브라우저에서만 지원되므로 Firefox 나 IE에서는 작동하지 않습니다. 브라우저 측 데이터베이스에 다른 방법을 쓰는 것이 좋습니다.

WebKit 브라우저 (Chrome, Safari)의 경우 SQL 문을 닫으려면 세미콜론을 사용해보십시오.

tx.executeSql (' "+ defaultLastModified() +'"NOT이 (ID INT 기본 키, NoteText, LASTMODIFIED 날짜 NOT NULL DEFAULT주의를 존재하는 경우 테이블 만들기 ');');

관련 문제