![](/img/trans.png)
[英]phonegap iOS app working on simulator but not in device. How to debug
[英]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.