【问题标题】:how to use Sqlite database in Phonegap application IOS and Android如何在Phonegap应用IOS和Android中使用Sqlite数据库
【发布时间】:2014-06-30 05:23:27
【问题描述】:

我正在使用 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);
    }

}

【问题讨论】:

  • 你能给我们看看 createDB() 函数调用吗?我不确定,但我的感觉是 window.localstorage 功能仅对该会话有效。因此,当您关闭该应用程序时,localStorage 中的数据将丢失。所以每次打开应用程序时都会执行 db.transaction(CreateDB.... 如果 CreateDB 包含 create table 语句,它将被执行。因此我想看看 createDB 函数的作用。
  • 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)" );这是我的 createDB();
  • 只是我只使用了 phonegap 文档作为参考,然后我就这样创建了。有人要求创建 sqlite 插件。但我不会安装插件。你能告诉我处理sqlite数据库的正确方法是什么,它是否正确?我做了什么我的功能。
  • 是否有可能找到我们可以在 db for android 中查看数据的位置

标签: cordova


【解决方案1】:

在您的 createDB() 调用中,您有一个 DROP table sql 语句。因此,每次打开应用程序时,都会执行 DROP 表和 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 ...

希望这会有所帮助。

【讨论】:

  • 好的,谢谢你的回答,实际上当我启动应用程序时,我像这样使用了这个查询,但发生了一些错误,这就是我改变的原因。表名不是问题。当我发布这个命令时,我刚刚改变了。我会试试这个。
  • 嗨,我的问题没有解决。没有再次加载数据库值。我做了所有的改变。我删除了删除查询并更改了创建表查询,例如您的 cmets。当我要重定向未正确加载的第二页数据库时。
  • $(document).on('pagebeforeshow', '#messageList', function() { checkPreAuth(); }); function checkPreAuth() { /* console.log("checkPreAuth");*/ if(window.localStorage.getItem("remember") == "true") { if(window.localStorage.getItem("username") ! = undefined && window.localStorage.getItem("password") != undefined) { $.mobile.changePage("Inbox.html"); } $('#messageList').live('pageshow', function(event) { db.transaction(queryDB,errorCB); });
  • 您遇到的错误是什么?您需要向我们提供您收到的错误/消息。我们不可能猜到您在哪里犯了错误。
  • 我没有收到错误。当我从 sqlite 数据库中选择时,数据库值未加载。函数 queryDB(tx){ var userid = window.localStorage.getItem("userId"); tx.executeSql('SELECT * FROM mytable where user_id="'+ userid +'" ORDER BY message_id DESC',[],querySuccess,errorCB); } function querySuccess(tx,results){ $.each(results.rows,function(index) { var row = results.rows.item(index); alert(row['message_id']); }); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2012-01-15
  • 2016-04-12
  • 2015-07-24
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多