2014-01-23 6 views
1

Я создаю приложение iphone с помощью телефонной заставки. Я использую sqlite3 db для локального хранения данных. Приложение отлично работает на симуляторе, но дает ошибку на самом устройстве ios. Он выбрасывает код ошибки «Could not prepare statement (1 no such table: table_name)» для этого же кода = 5.Приложение базы данных IOS (телефонная задержка) - работает на симуляторе, но не работает на устройстве

Должен ли я установить плагин sqlite на устройстве ios? Приложение находится на стадии тестирования. Я выполнил шаги, указанные в this, чтобы установить приложение на устройстве ios.

Что мне здесь не хватает?

Обновление: Это часть кода, которую я использую. Мой дб находится на месте

/Пользователи/Поддержка IMAC/Library/Application/iPhone Simulator/7.0.3/Применения/4C7CC11A-8938-479F-B810-86121D3311B7/Library/WebKit/Local Storage/File_0

А на устройстве он находится в

AppData/Library/WebKit/Local Storage/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> 

Это потому, что приложение не может найти db?

ответ

0

EDITED/NEW ОТВЕТ:
Как the article here очков, вы, вероятно, придется сделать некоторую работу в самой XCode. Как вы правильно отметили, путь к базе данных различен для баз данных, созданных заранее и во время выполнения. Короче говоря, ваши изменения будут искать предварительно заполненную базу данных и переместить ее в ожидаемое местоположение/папку, когда она будет обнаружена. Хорошая вещь: это произойдет до того, как ваш код начнет выполнять (javascript), чтобы ваш существующий код не был «осведомлен», что это даже произошло.

Стоит отметить, что сообщение, на которое я ссылаюсь, проходит мимо этого и исключает элемент из резервной копии в iCloud. Вам нужно будет сделать решение, хотите ли вы это сделать или нет. Он предварительно заполнен, не означает, что вы хотите НЕ поддерживать эту базу данных и не делать скачок (как это делает автор), что предварительно заполненная база данных, скорее всего, «большая».

OLD ОТВЕТ:
ошибка не кажется, указывают, что он испытывает трудности с самого SQLite, но проблема с конкретным таблица не существует.

Обычно это происходит, когда вы тестируете (через симулятор) и в какой-то момент нажимаете соответствующий код, который выполняет оператор CREATE для таблицы. Затем, позже, вы привыкли к тому, что там находится таблица, и случайно отключите проверку схемы или код проверки подлинности таблицы. Поскольку таблица уже существует, ваш симулятор продолжает и никогда не пытается воссоздать эту таблицу. Однако, когда вы идете запустить его на самом устройстве, этот код CREATE никогда не выполняется и попадает в область, где вы ожидаете существования таблицы, что вызывает ошибку.

Поскольку вы не разместили ни одного кода, это все догадки с моей стороны. Если вы хотите, чтобы я взглянул, я был бы счастлив.

+0

Да Я использую предварительно заполненный sqlite3 Db в своем приложении. – Arti

+0

Привет @Matt Ray, я обновил свой квестойн.Взгляни, пожалуйста. – Arti

+0

Эй, @ user1650891. Я обновил свой ответ на основе этого и утвердил дополнительную информацию! –

Смежные вопросы