当前位置:首页 > 新闻动态 > 网站文章

HBuilderX 5+app SQLite数据库操作

来源: 浏览:105 时间:2023-08-09

HBuilderX 5+app SQLite数据库操作

使用 HBuilderX 进行手机端 app 开发时,可以使用 SQLite 数据库进行本地存储,具体的 api 参考:

https://www.html5plus.org/doc/zh_cn/sqlite.html

包括:

  • openDatabase: 打开数据库
  • isOpenDatabase: 判断数据库是否打开
  • closeDatabase: 关闭数据库
  • transaction: 执行事务
  • executeSql: 执行增删改等操作的SQL语句
  • selectSql: 执行查询的SQL语句

由于这些 api 方法都是异步调用,所以与我们通常的数据库开发有一些差别。为此,我们可以对数据库操作进行封装,方便在开发中进行调用,封装如下:

const dbname = '数据库名称';
const dbfilename = '_doc/' + '数据库名称.db'; // 数据库文件
// 打开数据库
/*
* successCallback - 数据库操作成功的回调函数
* failCallback - 数据库操作失败的回调函数
*/
function open_db (successCallback, failCallback) {
    if (!plus.sqlite.isOpenDatabase({name: dbname, path: dbfilename})) {
        plus.sqlite.openDatabase({
            name: dbname,
            path: dbfilename,
            success: function(e){
                console.log('openDatabase success!');
                successCallback();
            },
            fail: function(e){
                console.log('openDatabase failed: '+JSON.stringify(e));
                failCallback(e);
            }
        });
    } else {
        successCallback();
    }
}
// 关闭数据库
function close_db (successCallback, failCallback) {
    if (plus.sqlite.isOpenDatabase({name: dbname, path: dbfilename})) {
        plus.sqlite.closeDatabase({
            name: dbname,
            success: function(e){
                console.log('closeDatabase success!');
                successCallback();
            },
            fail: function(e){
                console.log('closeDatabase failed: '+JSON.stringify(e));
                failCallback(e);
            }
        });
    } else {
        successCallback();
    }
}
// 执行普通 SQL 语句,包括 insert update delete 等
function run_common_sql (sSql, successCallback, failCallback) {
    plus.sqlite.executeSql({
        name: dbname,
        sql: sSql,
        success: function(e){
            console.log('SQL: ' + sSql);
            console.log('executeSql success!');     
            successCallback();
        },
        fail: function(e){
            console.log('executeSql failed: '+JSON.stringify(e));
            failCallback(JSON.stringify(e));
        }
    });
}
// 执行 select SQL 语句
/*
* 成功回调函数 successCallback 的参数为 data, 对象数组,是 select 语句返回的结果
*/
function run_select_sql(sSql, successCallback, failCallback) {
    plus.sqlite.selectSql({
        name: dbname,
        sql: sSql,
        success: function(data){
            console.log('SQL: ' + sSql);
            console.log('selectSql success! ');
            console.log(JSON.stringify(data));
            successCallback(data);
        },
        fail: function(e){
            console.log('selectSql failed: '+JSON.stringify(e));
            failCallback(JSON.stringify(e));
        }
    });
}

在 js 中,调用方法举例如下:

(本文以 vue 为例说明)

        mounted () {
            let _this = this;
            document.addEventListener('plusready', function(){
                console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。");
                _this.init_db_1();
            });
        },
        methods: {
            db_fail (ex) {
                vant.showDialog({ message: ex });
            },
            init_db_1 () {
                open_db(this.init_db_2, this.db_fail);
            },
            init_db_2 () {
                run_common_sql('create table if not exists server(host text, port int)', this.init_db_3, this.db_fail);
            },
            init_db_3 () {
                run_common_sql('create table if not exists storehouse(org_id varchar(64), org_name text, store_house_id varchar(64), store_house_name text)', this.visit_db_1, this.db_fail);
            },
            visit_db_1 () {
                run_select_sql('select host, port from server', this.visit_db_1_success, this.db_fail);
            },
            visit_db_1_success (data) {
                if (data.length <= 0) {
                    document.location.href='setupsys.html';
                } else {
                    this.host = data[0].host;
                    this.port = data[0].port;
                    run_select_sql('select org_id, org_name, store_house_id, store_house_name from storehouse', this.visit_db_2_success, this.db_fail);
                }
            },
            visit_db_2_success(data) {
}
        }
    });

也就是说,调用方法是先调用 open_db,在 open_db 函数中指定回调函数,然后调用执行 sql 语句的函数,每次调用都需要指定下一个成功回调函数,在成功回调函数中继续调用数据库操作。

地址 · ADDRESS

地址:建邺区新城科技园嘉陵江东街18号2层

邮箱:309474043@qq.Com

点击查看更多案例

联系 · CALL TEL

400-8793-956

售后专线:025-65016872

业务QQ:309474043    售后QQ:1850555641

©南京安优网络科技有限公司 版权所有   苏ICP备12071769号-4  网站地图