【问题标题】:Sqlite not working in hybrid appSqlite 在混合应用程序中不起作用
【发布时间】:2016-07-24 10:46:12
【问题描述】:

我正在使用 Monaca IDE 开发一个混合应用程序,问题是我使用的数据库是用 Sqlite 制作的,它在预览版中运行良好,我什至有另一个具有相同数据库方案的项目,它运行良好也是,但是当我尝试制作 .apk 时,应用程序可以工作,但永远不会创建数据库,我不知道我是否应该做一些我不知道的事情,或者你们是否有任何想法这里可能发生了什么!

注意:如果我在 Firefox 中打开 Monaca 预览,它也不起作用

这是我的数据库代码:

$(document).ready(function(){
     onDeviceReady();
});


function onDeviceReady() {
db = window.openDatabase('antel', '1.0', 'primera', 2 * 1024 * 1024);
db.transaction(crearBase);
};


function crearBase(tx) {
tx.executeSql('Create table if not exists PARADA (nombre TEXT PRIMARY KEY)', [], function (tx) {
    tx.executeSql('Create table if not exists REGISTRO (id INTEGER PRIMARY KEY autoincrement, nomParada TEXT REFERENCES PARADA (nombre), tipo TEXT ,km TEXT,fecha TEXT,hora TEXT)', [], function (tx) {
         tx.executeSql('Create table if not exists EMAIL (id INTEGER PRIMARY KEY autoincrement,nombre TEXT)', [], function (tx) {
            tx.executeSql('Select nombre FROM PARADA',[],meFijoSiEsVacia);});
    });
});

}

【问题讨论】:

    标签: javascript html angularjs sqlite monaca


    【解决方案1】:

    我不确定你是否需要像这样创建一个回调地狱。您应该考虑到您依赖于每个语句都可以正常运行并且没有错误处理。我不喜欢 Monaca - 所以不确定他们使用的是哪个 cordova SQLite 插件,但我查看了 their documentation regarding SQLite

    他们正在执行打开sql事务的所有语句:

    function onDeviceReady() {
        var db = window.openDatabase('antel', '1.0', 'primera', 2 * 1024 * 1024);
        db.transaction(crearBase, errorCB, successCB);
    };
    
    
    function crearBase(tx) {
        tx.executeSql('Create table if not exists PARADA (nombre TEXT PRIMARY KEY)');
        tx.executeSql('Create table if not exists REGISTRO (id INTEGER PRIMARY KEY autoincrement, nomParada TEXT REFERENCES PARADA (nombre), tipo TEXT ,km TEXT,fecha TEXT,hora TEXT)');
        tx.executeSql('Create table if not exists EMAIL (id INTEGER PRIMARY KEY autoincrement,nombre TEXT)');
        tx.executeSql('Select nombre FROM PARADA');
    }
    
    function errorCB(err) {
        console.log("Error occured while executing SQL: "+err.code);
    }
    
    function successCB() {
        console.log("all fine");
    }
    

    嵌套所有这些成功函数可能是有原因的,但您还应该处理错误回调。仅仅声明“预览有效,设备无效”是不够的。浏览器环境当然不同于 Cordova 插件。

    【讨论】:

      【解决方案2】:

      虽然 Kerosene 关于如何编写这些语句是正确的,但我遇到的问题是我的 Jquery 导入,因为我有:

      <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
      

      这样(我不知道为什么)它在预览中有效,但在设备中无效

      当我把它改成:

      <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
      

      效果很好!,

      谢谢煤油,只有你愿意帮忙!

      【讨论】:

        猜你喜欢
        • 2020-09-13
        • 1970-01-01
        • 2015-07-10
        • 2020-01-30
        • 1970-01-01
        • 2015-05-15
        • 2021-06-22
        • 2020-01-27
        • 1970-01-01
        相关资源
        最近更新 更多