#cordova
#кордова
Вопрос:
Я работаю с приложением phonegap. Я выполнил функцию запоминания меня в своем приложении. итак, если пользователь использовал опцию запомнить меня. просто я перенаправляю пользователя на страницу входящих сообщений. но база данных удаляется при закрытии приложения и открытии во второй раз. проблема в том, что значение базы данных не загружено в мой почтовый ящик. Я не хочу удалять базу данных, когда пользователь закрывает приложение без выхода из системы. пожалуйста, помогите мне.
Я создал тело базы данных onload=»init()»
function init() {
document.addEventListener("deviceready", onDeviceReady, false);
delete init;
}
function onDeviceReady() {
if(window.localStorage.getItem("remember") == null)
{
db = window.openDatabase("SampleDB","0.1","Name DB", 5000000);
db.transaction(createDB, errorDB, txSuccess);
}
}
Комментарии:
1. можете ли вы показать нам вызов функции createDB(). Я не уверен, но у меня такое ощущение, что это окно. функциональность localstorage будет действительна только для этого сеанса. Таким образом, когда вы закроете это приложение, данные в localStorage будут потеряны. итак, каждый раз, когда вы открываете приложение, db.transaction(CreateDB…. будет выполнен, и если CreateDB содержит инструкцию create table, она будет выполнена. Поэтому я хотел бы посмотреть, что делает функция createDB.
2. функция createDB(tx) { tx.ExecuteSQL(«УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ zergId»); tx.ExecuteSQL(«СОЗДАТЬ ТАБЛИЦУ mytable (ЦЕЛОЧИСЛЕННЫЙ ИДЕНТИФИКАТОР, идентификатор пользователя, s_id, s_name, r_id, r_name, e_id, subject, char_id, char_name, g_id, g_name, ЦЕЛОЕ число parent_id, is_viewed, is_parent, is_garbage, is_deleted, сообщение, created_date)»); } Это мой createDB();
3. Просто я использовал только документ phonegap для справки, а затем создал вот так. кто-то попросил создать плагин sqlite. но я не буду устанавливать плагин. не могли бы вы сказать мне, какой правильный способ обработки базы данных sqlite и правильный или нет? что я сделал с моей функциональностью.
4. Возможно ли найти, где мы можем видеть наши данные в БД для Android
Ответ №1:
В вашем вызове createDB () у вас есть SQL-оператор DROP table. Таким образом, каждый раз, когда вы открываете свое приложение, будут выполняться DROP table и CREATE TABLE. Также я заметил, что оператор DROP представляет собой другую таблицу «zergid», чем оператор CREATE «mytable». Это ваше требование?
function createDB(tx) {
tx.executeSql("DROP TABLE IF EXISTS zergId");
tx.executeSql("CREATE TABLE mytable(id INTEGER, user_id , s_id , s_name, r_id , r_name, e_id , subject, char_id , char_name, g_id , g_name, parent_id INTEGER , is_viewed ,is_parent, is_garbage, is_deleted, message, created_date)");
}
Если вы хотите создать таблицу только один раз, вы можете использовать предложение IF NOT EXISTS.
tx.executeSql("CREATE TABLE IF NOT EXISTS mytable(id INTEGER ...
Надеюсь, это поможет.
Комментарии:
1. хорошо, спасибо за ответ на самом деле, когда я запускаю приложение, я использовал этот запрос следующим образом, но произошла какая-то ошибка, поэтому я изменил. Название таблицы — это не проблема. Я просто изменился, когда опубликовал эту команду. я попробую это.
2. Привет, моя проблема не решена. Значение базы данных больше не загружалось. Я внес все изменения. Я удалил запрос на удаление и изменил запрос на создание таблицы в соответствии с вашими комментариями. когда я собираюсь перенаправить вторую страницу базы данных, она загружается неправильно.
3. $(document).on(‘pagebeforeshow’, ‘#MessageList’, функция() { checkPreAuth(); }); функция checkPreAuth() { /* console.log(«checkPreAuth»);*/ если(window. localStorage.GetItem(«запомнить») == «истина») { если(окно. localStorage.GetItem(«имя пользователя») != неопределенное amp;amp; окно. localStorage.GetItem(«пароль») != не определено) { $.mobile.changePage(«Inbox.html «); } $(‘#MessageList’).live(‘pageshow’, функция (событие) { db.transaction(queryDB,errorCB); });
4. что это за ошибка, которую вы получаете? Вам необходимо предоставить нам сообщение об ошибке, которое вы получаете. Мы не можем догадаться, где вы допускаете ошибку.
5. Я не получаю сообщение об ошибке. значение базы данных не загружается, когда я выбираю из базы данных sqlite. функция queryDB(tx){ var userid = window. localStorage.GetItem(«Идентификатор пользователя»); tx.ExecuteSQL(‘SELECT * FROM mytable where user_id=»‘ идентификатор пользователя ‘» ORDER BY message_id DESC’,[],querySuccess,errorCB); } функция querySuccess(tx, результаты){ $.each(results.rows,функция(индекс) { переменная строка = results.rows.item(индекс); оповещение (строка[‘message_id’]); }); }