H5+APP封装本地数据库sqlite的基础操作

已封装源码

https://gitee.com/zhangxuelian/h5plus-sqlite/blob/master/src/sqlite.js

使用案例

https://gitee.com/zhangxuelian/h5plus-sqlite/blob/master/src/app.vue

说明

打开数据库

/**
* 打开数据库
* @param {*} dbName 数据库名称
* @param {*} dbPath 数据库路径
* @returns Promise
*/
openDB({ dbName, dbPath }) {
   dbName = dbName || this.dbName;
   dbPath = dbPath || this.dbPath;
   return new Promise((resolve, reject) => {
       if (this.isPlus()) {
           plus.sqlite.openDatabase({
               name: dbName,
               path: dbPath,
               success: function (e) {
                   resolve('openDatabase success!');
               },
               fail: function (e) {
                   reject('openDatabase failed: ' + JSON.stringify(e));
               }
           });
       } else {
           reject("当前不是5+APP,无法操作本地数据库!");
       }
   })
},

是否已打开数据库

/**
 * 是否已打开数据库
 * @param {*} dbName 数据库名称
 * @param {*} dbPath 数据库路径
 * @returns Boolean
 */
isOpenDB({ dbName, dbPath }) {
    dbName = dbName || this.dbName;
    dbPath = dbPath || this.dbPath;
    if (this.isPlus()) {
        return plus.sqlite.isOpenDatabase({
            name: dbName,
            path: dbPath
        });
    } else {
        console.log("当前不是5+APP,无法操作本地数据库!");
        return false;
    }
},

关闭数据库

/**
 * 关闭数据库
 * @param {*} dbName 数据库名称
 * @returns Promise
 */
closeDB(dbName) {
    dbName = dbName || this.dbName;
    return new Promise((resolve, reject) => {
        plus.sqlite.closeDatabase({
            name: dbName,
            success: function (e) {
                resolve('closeDatabase success!');
            },
            fail: function (e) {
                reject('closeDatabase failed: ' + JSON.stringify(e));
            }
        });
    });
},

执行增删改等操作的SQL语句

/**
 * 执行增删改等操作的SQL语句
 * @param {*} dbName 数据库名称
 * @param {*} sql 需要执行的SQL语句 注意:Android平台不支持SQL语句中使用“;”分割多条命令,要运行多条命令请使用字符串数组参数。
 * @returns Promise
 */
executeSQL({ dbName, sql }) {
    dbName = dbName || this.dbName;
    return new Promise((resolve, reject) => {
        plus.sqlite.executeSql({
            name: dbName,
            sql: sql,
            success: function (e) {
                resolve('executeSql success!');
            },
            fail: function (e) {
                reject('executeSql failed: ' + JSON.stringify(e));
            }
        });
    });
},

执行查询的SQL语句

/**
 * 执行查询的SQL语句
 * @param {*} dbName 数据库名称
 * @param {*} sql 需要查询的SQL语句
 * @returns Promise
 */
selectSQL({ dbName, sql }) {
    dbName = dbName || this.dbName;
    return new Promise((resolve, reject) => {
        plus.sqlite.selectSql({
            name: dbName,
            sql: sql,
            success: function (data) {
                resolve(data);
            },
            fail: function (e) {
                reject('selectSql failed: ' + JSON.stringify(e));
            }
        });
    });
}

执行事务

/**
 * 执行事务
 * @param {*} dbName 数据库名称
 * @param {*} operation begin(开始事务)、commit(提交)、rollback(回滚)
 * 事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。
 * @returns Promise
 */
transactionDB({ dbName, operation }) {
    dbName = dbName || this.dbName;
    return new Promise((resolve, reject) => {
        plus.sqlite.transaction({
            name: dbName,
            operation,
            success: function (e) {
                resolve('transaction success!');
            },
            fail: function (e) {
                reject('transaction failed: ' + JSON.stringify(e));
            }
        });
    });
},

创建表

/**
 * 创建表
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldList 字段列表,例如:[{columnName:'id',dataType:'integer',constraints:['not null','primary key']},{columnName:'text',dataType:'varchar(100)'}]
 * @param {*} fieldList[0].columnName 字段名
 * @param {*} fieldList[0].dataType 数据类型
 * @param {*} fieldList[0].constraints 约束
 * @returns Promise
 */
createTb({ dbName, tbName, fieldList }) {
    dbName = dbName || this.dbName;
    let defineTableList = [];
    fieldList.forEach(item => {
        let column = `${item.columnName} ${item.dataType}`;
        if (item.constraints && item.constraints.length) {
            column += ` ${item.constraints.join(" ")}`;
        }
        defineTableList.push(column);
    });
    let sql = `create table if not exists ${tbName}(${defineTableList.join(",")})`;
    return this.executeSQL({ dbName, sql });
},

根据固定条件获取统计数

/**
 * 根据固定条件获取统计数
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} key 字段名
 * @param {*} value 值
 * @returns Promise
 */
getCountByKey({ dbName, tbName, key, value }) {
    return new Promise((reslove, reject) => {
        let sql = `select count(*) as count from ${tbName}`;
        if (key && value) {
            sql += ` where ${key} = ${JSON.stringify(value)}`;
        }
        this.selectSQL({ dbName, sql }).then(ret => {
            if (ret.length && ret[0] && ret[0].count) {
                reslove(ret[0].count);
            } else {
                reslove(0);
            }
        }, err => {
            reject(err);
        });
    });
},

根据条件获取统计数

/**
 * 根据条件获取统计数
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} condition 条件:name = 'zxl' and loginTime > 10 and sal in (5000,3000,1500)
 * @returns Promise
 */
getCountByCondition({ dbName, tbName, condition }) {
    return new Promise((reslove, reject) => {
        let sql = `select count(*) as count from ${tbName}`;
        if (condition) {
            sql += ` where ${condition}`;
        }
        this.selectSQL({ dbName, sql }).then(ret => {
            if (ret.length && ret[0] && ret[0].count) {
                reslove(ret[0].count);
            } else {
                reslove(0);
            }
        }, err => {
            reject(err);
        });
    });
},

插入记录

/**
 * 插入记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldList 字段列表,例如:{id:1,text:'abc'}
 * @returns Promise
 */
insert({ dbName, tbName, record }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        let columns = [], values = [];
        for (let i in record) {
            columns.push(i);
            values.push(JSON.stringify(record[i]));
        }
        let sql = `insert into ${tbName} (${columns.join(",")}) values (${values.join(",")})`;
        this.executeSQL({ dbName, sql }).then(ret => {
            resolve(ret);
        }, err => {
            reject(err);
        });
    })
},

批量插入记录

/**
 * 批量插入记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldList 字段列表,例如:[{id:1,text:'abc'},{id:2,text:'def'}]
 * @returns Promise
 */
insertBatch({ dbName, tbName, fieldList }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        let len = fieldList.length, result = { success: [], error: [] };
        let insertRecord = (i) => {
            this.insert({ dbName, tbName, record: fieldList[i] }).then(ret => {
                result.success.push(ret);
                if (i < len - 1) {
                    insertRecord(i + 1);
                } else {
                    resolve(result);
                }
            }, err => {
                result.error.push(err);
                if (i < len - 1) {
                    insertRecord(i + 1);
                } else {
                    resolve(result);
                }
            });
        }
        insertRecord(0);
    });
},

更新记录

/**
 * 更新记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldKey 字段主键,默认id
 * @param {*} record 字段列表,例如:{id:1,text:'abc'}
 * @returns Promise
 */
update({ dbName, tbName, fieldKey, record }) {
    return new Promise((reslove, reject) => {
        dbName = dbName || this.dbName;
        fieldKey = fieldKey || "id";
        let recordArr = [];
        for (let i in record) {
            recordArr.push(`${i} = ${JSON.stringify(record[i])}`);
        }
        let sql = `update ${tbName} set ${recordArr.join(",")} where ${fieldKey} = ${JSON.stringify(record[fieldKey])}`;
        this.executeSQL({ dbName, sql }).then(ret => {
            reslove(ret);
        }, err => {
            reject(err);
        });
    });
},

批量更新记录

/**
 * 批量更新记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldKey 字段主键,默认id
 * @param {*} fieldList 字段列表,例如:[{id:1,text:'abc'},{id:2,text:'def'}]
 * @returns Promise
 */
updateBatch({ dbName, tbName, fieldKey, fieldList }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        fieldKey = fieldKey || "id";
        let len = fieldList.length, result = { success: [], error: [] };
        let updateRecord = (i) => {
            this.update({ dbName, tbName, fieldKey, record: fieldList[i] }).then(ret => {
                result.success.push(ret);
                if (i < len - 1) {
                    updateRecord(i + 1);
                } else {
                    resolve(result);
                }
            }, err => {
                result.error.push(err);
                if (i < len - 1) {
                    updateRecord(i + 1);
                } else {
                    resolve(result);
                }
            });
        }
        updateRecord(0);
    });
},

批量更新记录(若该记录不存在则新增)

/**
 * 批量更新记录(若该记录不存在则新增)
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} fieldKey 字段主键,默认id
 * @param {*} fieldList 字段列表,例如:[{id:1,text:'abc'},{id:2,text:'def'}]
 * @returns Promise
 */
dealUpdateBatch({ dbName, tbName, fieldKey, fieldList }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        fieldKey = fieldKey || "id";
        let len = fieldList.length, result = { success: [], error: [] };
        let updateRecord = (i) => {
            this.getCountByKey({ dbName, tbName, key: fieldKey, value: fieldList[i][fieldKey] }).then(count => {
                if (count) {
                    // 已存在并更新
                    this.update({ dbName, tbName, fieldKey, record: fieldList[i] }).then(ret => {
                        result.success.push(ret);
                        if (i < len - 1) {
                            updateRecord(i + 1);
                        } else {
                            resolve(result);
                        }
                    }, err => {
                        result.error.push(err);
                        if (i < len - 1) {
                            updateRecord(i + 1);
                        } else {
                            resolve(result);
                        }
                    });
                } else {
                    // 不存并插入
                    this.insert({ dbName, tbName, record: fieldList[i] }).then(ret => {
                        result.success.push(ret);
                        if (i < len - 1) {
                            updateRecord(i + 1);
                        } else {
                            resolve(result);
                        }
                    }, err => {
                        result.error.push(err);
                        if (i < len - 1) {
                            updateRecord(i + 1);
                        } else {
                            resolve(result);
                        }
                    });
                }
            })

        }
        updateRecord(0);
    });
},

查询全部记录

/**
 * 查询全部记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 */
selectAll({ dbName, tbName }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        this.selectSQL({
            dbName,
            sql: `select * from ${tbName}`
        }).then(ret => {
            resolve(ret);
        }, err => {
            reject(err)
        });
    });
},

根据条件查询记录

/**
 * 根据条件查询记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} condition 条件,例如: {columns:['id','name'],where: "id=1",orderBy:"id asc"}
 */
selectByCondition({ dbName, tbName, condition }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        let sql = `select `;
        if (condition.columns) {
            sql += `${condition.columns.join(",")}`;
        } else {
            sql += `*`
        }
        sql += ` from ${tbName}`;
        if (condition.where) {
            sql += ` where ${condition.where}`;
        }
        if (condition.orderBy) {
            sql += ` order by ${condition.orderBy}`
        }
        this.selectSQL({
            dbName,
            sql
        }).then(ret => {
            resolve(ret);
        }, err => {
            reject(err)
        });
    });
},

删除全部记录

/**
 * 删除全部记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 */
deleteAll({ dbName, tbName }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        this.executeSQL({
            dbName,
            sql: `delete from ${tbName}`
        }).then(ret => {
            resolve(ret);
        }, err => {
            reject(err)
        });
    });
},

根据条件删除记录

/**
 * 根据条件删除记录
 * @param {*} dbName 数据库名称
 * @param {*} tbName 表名
 * @param {*} condition where条件,例如: "id=1"
 */
deleteByCondition({ dbName, tbName, condition }) {
    return new Promise((resolve, reject) => {
        dbName = dbName || this.dbName;
        let sql = `delete from ${tbName} `;
        if (condition) {
            sql += `where ${condition}`;
        }
        this.executeSQL({
            dbName,
            sql
        }).then(ret => {
            resolve(ret);
        }, err => {
            reject(err)
        });
    });
},
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Qt 和 VS 使用 SQLite 数据库的步骤如下: 1. 在 Qt 中添加 SQLite 驱动程序。可以通过 Qt Maintenance 工具来完成。打开 Qt Maintenance 工具,选择“添加或删除组件”,在“Qt”下找到“Qt版本”,选择“Qt 5.15.0”(或者其他版本),在右侧的“Qt 5.15.0”区域里勾选“Qt SQL”,然后点击“安装”按钮。 2. 在 Qt 项目中添加 SQLite 的头文件和库文件。在 Qt 项目中的 .pro 文件中添加以下代码: ``` QT += sql LIBS += -lsqlite3 ``` 3. 在 Qt 项目中使用 QSqlDatabase 类连接 SQLite 数据库。可以在 main 函数中添加以下代码: ``` #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> int main(int argc, char *argv[]) { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Cannot open database"; return 1; } QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"); query.exec("INSERT INTO mytable (name) VALUES ('John')"); query.exec("INSERT INTO mytable (name) VALUES ('Jane')"); query.exec("SELECT * FROM mytable"); while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << QString("id=%1, name=%2").arg(id).arg(name); } db.close(); return 0; } ``` 这段代码会创建一个名为“mydatabase.db”的 SQLite 数据库文件,并在其中创建一个名为“mytable”的表格,然后插入两条记录(John 和 Jane),最后查询表格中的所有记录,并输出到控制台。 4. 编译并运行 Qt 项目。在 VS 中编译并运行 Qt 项目,可以看到控制台输出了两条记录(John 和 Jane)。 以上就是使用 Qt 和 VS 使用 SQLite 数据库的基本步骤。需要注意的是,在实际开发中,可能需要更加复杂的操作,比如使用 QSqlTableModel 类来操作数据库表格,使用 QSqlRelationalTableModel 类来操作多个相关表格等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值