2011-10-23 2 views
1

시간이 지났지 만 코드에 어떤 문제가 있는지 찾을 수 없습니다.저장 또는 선택 중 HTML5 데이터베이스 문제가 발생했습니다.

코드는 종료하지 않으면 표를 작성하고 텍스트 상자에 입력 한 텍스트를 추가합니다. 모든로드시로드되고로드됩니다.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     var mydb = null; 

     function initDatabase() { 
      try { 
       if (!window.openDatabase) { 
        alert('Databases are not supported in this browser.'); 
       } else { 
        var shortName = 'mydb'; 
        var version = '1.0'; 
        var displayName = 'sample db'; 
        var maxSize = 1024*1024*2; 
        mydb = openDatabase(shortName, version, displayName, maxSize, null); 

        mydb.transaction(
         function (transaction) { 
          transaction.executeSql('CREATE TABLE IF NOT EXISTS sampletable(term TEXT NOT NULL);', [], nullDataHandler, errorHandler); 
         } 
        ); 

        loadDB(); 
       } 
      } catch(e) { 
       if (e == 2) { 
        alert("Invalid database version."); 
       } else { 
        alert("Unknown error "+e+"."); 
       } 
       return; 
      } 
     } 

     function loadDB() { 
      $(".debugger").html(""); 

      mydb.transaction(
       function (t) { 
        t.executeSql("SELECT * FROM sampletable", [],dataSelectHandler,errorHandler); 
       } 
      ); 
     } 

     function saveDB(_term) { 
      mydb.transaction(
       function (transaction) { 
        transaction.executeSql("INSERT INTO sampletable(_term) VALUES (\""+_term + "\");"); 
       } 
      ); 
     } 

     function dataSelectHandler(transaction, results){ 
      $(".debugger").append("<li>Length: " + results.rows.length + "</li>"); 

      for (var i=0; i<results.rows.length; i++) 
      { 
       var row = results.rows.item(i);   
       addToHistoryUI(row['_term']); 
      } 
     } 

     function errorHandler(transaction, error){ 
      if (error.code==1){ 
       alert("DB Table already exists"); 
      } else { 
       // Error is a human-readable string. 
       alert('Oops. Error was '+error.message+' (Code '+error.code+')'); 
      } 
      return false; 
     } 


     function nullDataHandler(){ 
      //alert("SQL Query Succeeded"); 
     } 

     function addToHistoryUI(_term) 
     { 
      var newH = "<li>" + _term + "</li>"; 
      $(".addedQueries").append(newH); 
     } 

     $(function() { 
      initDatabase(); 
     }); 

     $(document).ready(function() { 
      $(".addBtn").click(function() {  
       var _term = $("#query").val(); 

       addToHistoryUI(_term);     
       saveDB(_term); 

       loadDB(); 
      }); 
     }); 
</script> 
</head> 
<body> 
    <div data-role="page" id="index"> 
     <div class="panel"> 
       <input id="query" type="text" name="query" /> 
       <a class="navigationLink addBtn" href="#">add</a> 
      </div> 
      <div class="content"> 
       <ul class="addedQueries"> 
       </ul> 
      </div> 

      <ul class="debugger"></ul> 
     </div> 
</body> 
</html> 
+0

그리고 오류는 무엇입니까? –

+0

예상되는 결과는 무엇이며 실제로 무엇이 발생합니까? 이 정보 없이는 도움이 어렵습니다. – btleffler

+0

WebSQL처럼 단계적으로 진행되지 않으므로 IndexedDB를 살펴 봅니다. – btleffler

답변

0

saveDB() 메소드에서 WHERE 절에 큰 따옴표를 사용하는 것처럼 보입니다. 그것에 대해 내가 맞습니까?

큰 따옴표는 SQL에서 실행되지 않습니다.

왜 SELECT가 작동하지 않을지 잘 모르겠습니다. 오류 메시지를 게시하십시오.

업데이트 : 오타가있어 INSERT에 실패했습니다.

transaction.executeSql("INSERT INTO sampletable(_term) VALUES (\""+_term + "\");"); 

당신은 sampletable는 (_term) INTO,하지만 당신은 돈, t는 _term라는 열이 열 이름은 (아무 밑줄) 용어입니다. 나는 그 변화를 만들었고 삽입물은 이제 일어난다.

당신은 또한 다른 사소한 것들이있었습니다. 이것은 당신이 원하는 것을하는 것처럼 보입니다.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     var mydb = null; 

     function initDatabase() { 
      try { 
       if (!window.openDatabase) { 
        alert('Databases are not supported in this browser.'); 
       } else { 
        var shortName = 'mydb'; 
        var version = '1.0'; 
        var displayName = 'sample db'; 
        var maxSize = 1024*1024*2; 
        mydb = openDatabase(shortName, version, displayName, maxSize, null); 

        mydb.transaction(
         function (t) { 
          t.executeSql('CREATE TABLE IF NOT EXISTS sampletable(term TEXT NOT NULL);', [], nullDataHandler, errorHandler); 
         } 
        ); 

        loadDB(); 
       } 
      } catch(e) { 
       if (e == 2) { 
        alert("Invalid database version."); 
       } else { 
        alert("Unknown error "+e+"."); 
       } 
       return; 
      } 
     } 

     function loadDB() { 
      $(".debugger").html(""); 
      $("li").remove(); 

      mydb.readTransaction(
       function (t) { 
        t.executeSql("SELECT term FROM sampletable", [],dataSelectHandler,errorHandler); 
       } 
      ); 
     } 

     function saveDB(_term) { 
      mydb.transaction(
       function (transaction) { 
        transaction.executeSql("INSERT INTO sampletable(term) VALUES ('"+_term + "');"); 
       } 
      ); 
     } 

     function dataSelectHandler(t, results){ 

      $(".debugger").append("<li>Length: " + results.rows.length + "</li>"); 

      for (var i=0; i<results.rows.length; i++) 
      { 
       var row = results.rows.item(i);   
       addToHistoryUI(row['term']);  

      } 
     } 

     function errorHandler(transaction, error){ 
      if (error.code==1){ 
       alert("DB Table already exists"); 
      } else { 
       // Error is a human-readable string. 
       alert('Oops. Error was '+error.message+' (Code '+error.code+')'); 
      } 
      return false; 
     } 


     function nullDataHandler(){ 
      //alert("SQL Query Succeeded"); 
     } 

     function addToHistoryUI(_term) 
     { 
      var newH = "<li>" + _term + "</li>"; 
      $(".addedQueries").append(newH); 
     } 

     $(function() { 
      initDatabase(); 
     }); 

     $(document).ready(function() { 
      $(".addBtn").click(function() {  
       var _term = $("#query").val(); 

       addToHistoryUI(_term);     
       saveDB(_term); 

       loadDB(); 
      }); 
     }); 
</script> 
</head> 
<body> 
    <div data-role="page" id="index"> 
     <div class="panel"> 
       <input id="query" type="text" name="query" /> 
       <a class="navigationLink addBtn" href="#">add</a> 
      </div> 
      <div class="content"> 
       <ul class="addedQueries"> 
       </ul> 
      </div> 

      <ul class="debugger"></ul> 
     </div> 
</body> 
</html> 
+0

transaction.executeSql ("INSERT INTO sampletable (_term) VALUES ('+ + _term +"'); ");로 변경했습니다. 하지만 다시는 효과가 없으며 나에게 불행을주지 않습니다. – Kaan

+0

글쎄, 나는 당신이 얻을 오류 메시지가 뭔지 우리에게 말할 때까지 도움을 다하고 있어요. –

+0

나는 다시 말하고있다 : "그것은 나에게 오류를주지 않는다". – Kaan