簡體   English   中英

iOS數據庫應用程序(phonegap)-在模擬器上運行,但在設備上不運行

[英]IOS database app(phonegap)- working on simulator but not working on device

我使用phonegap構建了一個iPhone應用程序。 我正在使用sqlite3 db在本地存儲數據。 該應用程序可以在模擬器上完美運行,但在實際的ios設備上會出現錯誤。 它拋出“ Could not prepare statement (1 no such table: table_name) ”的錯誤代碼,同樣是Code = 5。

我必須在iOS設備上安裝sqlite插件嗎? 該應用程序處於測試階段。 我也跟着在提供的步驟 ,安裝iOS設備上的應用程序。

我在這里想念什么?

更新:這是我正在使用的代碼。 我的數據庫位於該位置

/ Users / imac / Library / Application Support / iPhone Simulator / 7.0.3 / Applications / 4C7CC11A-8938-479F-B810-86121D3311B7 / Library / WebKit / Local Storage / File_0

在設備上,它位於

AppData /庫/ WebKit /本地存儲/文件_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>

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

編輯/新答案:
正如本文所指出的那樣,您可能必須在XCode本身中做一些工作。 正如您正確指出的那樣,預填充數據庫和運行時創建的數據庫的數據庫路徑是不同的。 簡而言之,您的修改將查找預填充的數據庫,並在檢測到該數據庫時將其移動到預期的位置/文件夾。 妙處:這將在您的代碼開始執行(javascript)之前發生,因此您現有的代碼將不會“意識到”甚至發生這種情況。

值得一提的是,我指給您的帖子已超出此范圍,並且將該項目排除在備份到iCloud之外。 您將不得不做出是否要這樣做的判斷。 預先填充的數據庫並不意味着您不希望不備份該數據庫,也不意味着(正如作者所做的那樣)使預先填充的數據庫可能“很大”。

舊答案:
該錯誤似乎並不表示它在使用SQLite本身時遇到困難,而是特定表不存在的問題。

這通常在您進行測試(通過模擬器)並且在某些時候點擊執行該表的CREATE語句的適當代碼時發生。 然后,以后,您習慣了該表在那里,並意外斷開了模式檢查或表存在性檢查代碼的連接。 由於該表已經存在,因此您的模擬器會繼續運行,並且不會嘗試重新創建該表。 但是,當您在實際設備上運行它時,該CREATE代碼將永遠不會執行,並且會落入您希望該表存在的區域中-這會導致錯誤。

由於您尚未發布任何代碼,因此這完全是我的猜測。 如果您想讓我看看,我將很高興。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM