Cordova 8 架构使用sqlite

本来想现在开源产品这么多,使用sqlite应该很简单, 却走了不少弯路,特把可以成功过程在这里记录一下:

插件网址:
https://github.com/litehelpers/Cordova-sqlite-storage

安装步骤

使用cordova plugin命令安装

cordova plugin add cordova-sqlite-storage

安装结束后,使用中会报错:
new transaction is waiting for open operation

在官方查到,这个安装后版本不是最新的。

cordova 从git安装

cordova plugin add https://github.com/litehelpers/Cordova-sqlite-storage

运行一半,提示:
这里写图片描述

这大概原因是git克隆网址与cordova不在一个盘上。
改用分开运行:

git clone https://github.com/litehelpers/Cordova-sqlite-storage

也可以直接下载最新压缩包后解压。
然后手工安装
cordova plugin add 本地路径
在这之前,如果本地已经有的plugin,可以使用
cordova plugin remove 包名
进行删除。

安装plugman

官方推荐使用plugman安装。

npm install -g plugman
plugman install –platform MYPLATFORM –project path.to.my.project.folder –plugin https://github.com/litehelpers/Cordova-sqlite-storage

其中platform可能是以下值:
- android
- ios
- windows
- wp8

代码示例

当使用预先设置的数据库时,要把自己的数据库放在www根目录下,并且打开数据库时,设置createFromLocation值为1。需要注意的时候,如果测试时自动复制到android的/data/data/应用程序名/databases下失败了,那把app 卸载后再试,不要直接覆盖安装。


    var options={
        name: "datas.db",createFromLocation: 1
    };

    function errorCB(err){
        console.log('errorCB:',err);
    }
function queryDB(tx){
            console.log('queryDB in function:getWikiCategories');
            tx.executeSql('select * FROM km_types WHERE parent_id=0',[],querySuccess,errorCB);
        }
        function querySuccess(tx,result){
console.log(tx,result);
            if(!result.rowsAffected){
                return false;
            }
            if(callback)callback(result);
        }
        var db=window.sqlitePlugin.openDatabase(options);
        db.transaction(queryDB,errorCB);

Tips

cordova-plugin-dbcopy是另外一个专门把预设数据库拷贝到系统目录的工具。它不是必须的。

https://github.com/an-rahulpandey/cordova-plugin-dbcopy

function dbcopy()
{
        //Database filename to be copied is demo.db

        //location = 0, will copy the db to default SQLite Database Directory
        window.plugins.sqlDB.copy("demo.db", 0, copysuccess,copyerror);

        or

        //location = 1, will copy the database to /Library folder
        window.plugins.sqlDB.copy("demo.db", 1, copysuccess,copyerror);

        or

        //location = 2, will copy the database to /Library/LocalDatabase folder (Disable iCloud Backup)
        window.plugins.sqlDB.copy("demo.db", 2, copysuccess,copyerror);

}

function removeDB()
{
      var location = 1;
      window.plugins.sqlDB.remove("demo.db", location, rmsuccess,rmerror);  
}

function copysuccess()
{
        //open db and run your queries
         db = window.sqlitePlugin.openDatabase({name: "demo.db"});.
}

function copyerror(e)
{
        //db already exists or problem in copying the db file. Check the Log.
        console.log("Error Code = "+JSON.stringify(e));
        //e.code = 516 => if db exists
}

在使用Eclipse打开android 的cordova项目,如果使用了sqlite,可能会报错。

The library 'sqlite-native-driver.jar' contains native libraries that will not run on the device.

这时候可以从官网下载源码,找到sqlite-connector.jar
这里写图片描述

替换项目libs里原有的jar文件。
如果还不行,就这样操作:
把sqlite-native-driver.jar用winrar解压,把libs里的内容复制到android/libs下,删除sqlite-native-driver.jar,clean 项目,再运行程序测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值