2014-01-23 36 views
1

我使用phonegap構建iphone應用程序。我正在使用sqlite3數據庫在本地存儲數據。該應用程序在模擬器上完美工作,但在實際的ios設備上出現錯誤。它是拋出「Could not prepare statement (1 no such table: table_name)」錯誤代碼爲相同的是Code = 5。IOS數據庫應用程序(phonegap) - 在模擬器上工作,但不能在設備上工作

我必須在ios設備上安裝sqlite插件嗎?該應用程序正處於測試階段。我遵循this中提供的步驟,在iOS設備上安裝應用程序。

我在這裏錯過了什麼?

更新: 這是我使用的一段代碼。我的數據庫駐留在位置

/用戶/ iMac電腦/庫/ Application Support/iPhone 模擬器/ 7.0.3 /應用/ 4C7CC11A-8938-479F-B810-86121D3311B7 /圖書館/ WebKit的/本地存儲/ File_0

和設備上它駐留在

AppData的/圖書館/ WebKit的/本地存儲/ File_0

<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="format-detection" content="telephone=no" /> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 
     <link rel="stylesheet" type="text/css" href="css/index.css" /> 
     <script type="text/javascript" src="cordova.js"></script> 
     <script type="text/javascript" src="js/index.js"></script> 


     <title>Books | Categories</title> 

     <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> 
     <link href="css/style.css" rel="stylesheet" type="text/css"> 
     <script type="text/javascript" charset="utf-8" src="js/jquery.min.js"></script> 
     <script type="text/javascript" charset="utf-8"> 

      var db; 
      var shortName = 'Books'; 
      var version = '1.0'; 
      var displayName = 'BooksDB'; 
      var maxSize = 200000; 
      function errorHandler(transaction, error) { 
      alert('Error: ' + error.message + ' code: ' + error.code); 
      } 

      function successCallBack() { 
       alert("DEBUGGING: success"); 

      } 

      function nullHandler(){ 
       alert('null handler'); 
      }; 

      function onBodyLoad(){ 

       if (!window.openDatabase) { 
        alert('Databases are not supported in this browser.'); 
        return; 
       } 
       db = window.openDatabase(shortName, version, displayName, maxSize); 
       alert('db open'); 
       ListDBValues(); 
      } 

      function ListDBValues() { 
      var ArrayAlphabet=new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); 
      $('.container').empty(); 

      for (var i = 0; i < ArrayAlphabet.length; i++) { 

      data='<div class="order" id="'+ArrayAlphabet[i]+'"></div>'; 

      load_books(ArrayAlphabet[i]); 
      $('.container').append(data); 
      data=""; 
      } 
      return; 
     } 

      function load_books(bookTitleAlphabet) 
      { 

       if (!window.openDatabase) { 
        alert('Databases are not supported in this browser.'); 
        return; 
       } 

      db.transaction(function(transaction) { 
      transaction.executeSql('SELECT * FROM books where book_title like "'+bookTitleAlphabet+'%" order by book_title desc;', [], 
      function(transaction, result) {if (result != null && result.rows != null) { 
      $('#'+bookTitleAlphabet).html(bookTitleAlphabet); 

      for (var i = 0; i < result.rows.length; i++) { 
      var data; 
      var row = result.rows.item(i); 
      data="<a href='details.html?id="+row.book_id+"'> <div class='book'>";   
      data +="<div class='book_img'><img src="+row.book_thumb_location+"></div>";   
      data +="<div class='book_detail'>"; 
      data +="<div class='title'>"+row.book_title+"</div>"; 
      data +="<div class='author'>"+row.book_author+"</div>"; 
      data +="</div>"; 
      data +="<div class='clear'>"; 
      data +="</div>"; 
      data +="</div>"; 
      data +="</a>";  
      var tempId='#'+bookTitleAlphabet;  
      $(tempId).append(data); 

      tempId=""; 

      }} 
      if (result.rows.length==0) 
      { 
      var tempId='#'+bookTitleAlphabet; 

      $(tempId).hide(); 
      } 

      },errorHandler);},errorHandler,nullHandler); 

      return; 

     } 
     </script> 

</head>  
<body onload="onBodyLoad()">     
    <div id="wrapper">    
    <div class="overflow_hide"> 
    </div>       
    <div class="menu">         
     <div class="header">      
     <div class="back"> 
      <a href="index.html"> 
      <input class="gobutton" type="button" value="Back" ></a> 
     </div>      
     <div class="list_book">BOOKS 
     </div>      
     <div class="settings"> 
      <a href="index.html"> 
      <input class="gobutton" type="button" value="Home" ></a> 
     </div>         
     </div>         
     <div class="container">                     
     <div class="clear"> 
     </div>     
     </div>               
    </div>       
    <div class="opac">     
     <a href="about.html"> 
     <div class="opac1">About Us 
     </div></a>        
     <a href="search.html"> 
     <div class="opac1">Search 
     </div></a>        
    </div>       
    <div class="clear"> 
    </div>   
    </div>    
</body> 
</html> 

這是因爲應用程序找不到數據庫?

回答

0

編輯/新的答案:
作爲the article here指出,你可能將不得不做的XCode本身的一些工作。正如您正確地指出的那樣,數據庫的路徑對於預填充數據庫和運行時創建的數據庫而言是不同的。總之,您的修改將查找預填充的數據庫,並在檢測到時將其移至預期的位置/文件夾。好東西:這會在你的代碼開始執行之前發生(javascript),所以你現有的代碼將不會「意識到」這種情況發生了。

值得注意的是,我引用你的帖子是爲了超越這一點,並將該項從備份排除到iCloud。你將不得不作出判斷,你是否想要這樣做。它是預先填充的,並不意味着你不希望備份該數據庫,也不會像預先創建的數據庫那樣使預填充的數據庫很「大」。

OLD答:
似乎錯誤並不表明它是有使用SQLite本身的難度,但不存在一個特定的表有問題。

這通常發生在您測試(通過模擬器)並且在某處點擊執行該表的CREATE語句的適當代碼時。然後,稍後,您習慣使用那張表,並意外斷開模式檢查或表存在檢查代碼。由於表格已經存在,您的模擬器會繼續執行,並且從不嘗試重新創建該表格。然而,當您在實際設備上運行它時,CREATE代碼從不執行並落入您期望表存在的區域 - 這會導致錯誤。

既然您還沒有發佈任何代碼,這是我所有的猜想。如果你想讓我看看,我會很高興。

+0

是的我在我的應用程序中使用預先填充的sqlite3 Db。 – Arti

+0

Hi @Matt Ray,我已經更新了我的questoin。請看一下。 – Arti

+0

您好,@ user1650891。我基於此更新了我的答案並批准了其他信息! –

相關問題