项目背景

项目工作环境网络不好,或者涉及机密数据等,需要断网情况下的数据采集。当然我们可以通过localStorage来实现数据的本地存储,但这种方式,只能缓存少量切单一的数据。html5+ 有一个模块 sqlite,便可以实现我们的需求。

sqlite模块中的方法

plus.sqlite.openDatabase(options);

如果数据库存在则打开,不存在则创建。

  • options
  • name: ( String ) 必选 数据库名称
  • path: ( String ) 必选 数据库路径

⚠️ 根据官方文档推荐来 使用 _doc/x.db,因为该目录下既可以读写,又是该应用私有目录。

  • success: ( SQLiteSuccessCallback ) 可选 打开数据库成功回调函数
  • fail: ( SQLiteFailCallback ) 可选 打开数据库失败回调函数
//example
function openDB() {
	plus.sqlite.openDatabase({
		name: 'test',
		path: '_doc/test.db',
		success: function() {
			console.log('数据库打开成功')
		},
		fail: function(e) {
			console.error(e)
			// {code: '错误代码', message: '错误信息'}
		}
	})
}

plus.sqlite.isOpenDatabase(options);

数据库已经打开则返回true,数据库没有打开则返回false。 ⚠️HBuilderX1.9.0及以上版本支持。

  • options
  • name: ( String ) 必选 数据库名称
  • path: ( String ) 必选 数据库路径
  • return
  • true:数据库打开成功;false:数据库打开失败
//example
function isOpenDB() {
	const res = plus.sqlite.isOpenDatabase({
		name: 'test',
		path: '_doc/test.db',
	})
	console.log(res)
	// true|false
}

plus.sqlite.closeDatabase(options);

⚠️完成数据库操作后,必须关闭数据库,否则可能会导致系统资源无法释放。

  • options
  • name: ( String ) 必选 数据库名称
  • success: ( SQLiteSuccessCallback ) 可选 关闭数据库成功回调函数
  • fail: ( SQLiteFailCallback ) 可选 关闭数据库失败回调函数
//example
function closeDB() {
	plus.sqlite.closeDatabase({
		name: 'test',
		success: function() {
			console.log('数据库关闭成功')
		},
		fail: function(e) {
			console.error(e)
			// {code: '错误代码', message: '错误信息'}
		}
	})
}

plus.sqlite.transaction(options);

执行事务

  • options
  • name: ( String ) 必选 数据库名称
  • operation: ( String ) 必选 需要执行的事务操作 可选值:begin(开始事务)、commit(提交)、rollback(回滚)。
  • success: ( SQLiteSuccessCallback ) 可选 执行事务成功回调函数
    回调函数无返回参数。
  • fail: ( SQLiteFailCallback ) 可选 执行事务失败回调函数
//官方案例
function transactionDB(){
	plus.sqlite.transaction({
		name: 'first',
		operation: 'begin',
		success: function(e){
			console.log('transaction success!');
		},
		fail: function(e){
			console.log('transaction failed: '+JSON.stringify(e));
		}
	});
}

plus.sqlite.executeSql(options);

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

  • options
  • name: ( String ) 必选 数据库名称
  • sql: ( Array[String] | String ) 必选 需要执行的SQL语句

⚠️之所以 用字符串数组 实现执行多条,是因为Android平台不支持SQL语句中使用“;”分割多条命令

  • success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数
  • fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数
function executeSQL() {
	plus.sqlite.executeSql({
		name: 'test',
		sql: `create table if not exists users("name" CHAR(25),"gender" bit default 1,"age" INT(11))`,
		success: function() {
			console.log('x.db 新建成功')
			plus.sqlite.executeSql({
				name: 'x.db',
				sql: `insert into users values("小美", 0, 20)`,
				success: function() {
					console.log('新增数据成功')
				},
				fail: function(e) {
					console.error(e)
					// {code: '错误代码', message: '错误信息'}
				}
			})
		},
		fail: function(e) {
			console.error(e)
			// {code: '错误代码', message: '错误信息'}
		},
	})
}

plus.sqlite.selectSql(options);

执行查询的SQL语句

  • options
  • name: ( String ) 必选 数据库名称
  • sql: ( String ) 必选 需要查询的SQL语句
  • success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数

⚠️ 回调函数返回参数为JSON对象数组,其中JSON对象为查询的结果。 如果未查询到数据则返回参数为空数组。

  • fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数
//example
function selectSQL() {
	plus.sqlite.selectSql({
		name: 'test',
		sql: 'select * from users',
		success: function(data){
			console.log('selectSql success: ');
			for(var i in data){
				console.log(data[i]);
				//{name: "小美", gender: 0, age: 20}
			}
		},
		fail: function(e){
			console.error(e);
			// {code: '错误代码', message: '错误信息'}
		}
	});
}

至此 sqlite 模块,介绍完毕
如果要访问 我们创建的 sqlite 数据库,可以查看这篇文章 访问移动端 sqlite

相关文档

5+API文档5+API错误代码uni-app使用plus注意事项