2014-01-23 38 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。我基于此更新了我的答案并批准了其他信息! –

相关问题