数据库
## 获取数据库信息
```js
let db = sqlite.open("./data.db");
console.show();
log("数据库版本: ", db.version);
log("数据库页大小: ", db.pageSize);
log("数据库最大大小: ", db.maximumSize);
log("数据库路径: ", db.path);
log("数据库所有表的信息: ", db.rawQuery("SELECT * FROM sqlite_master WHERE type='table'", null).all());
```
## 数据库事务
```js
// 需要先运行过"数据库增删改查"脚本再运行此脚本
let db = sqlite.open("./data.db");
db.transaction(function() {
db.delete("STUDENT", "age = 18", null);
db.update("STUDENT", {score: 100}, "age = 19", null);
}).on("begin", function(t) {
log("事务开始: ", t);
}).on("commit", function(t) {
log("事务完成: ", t);
}).on("rollback", function(t) {
log("事务回滚: ", t);
}).on("end", function(t) {
log("事务结束: ", t);
}).on("error", function(e) {
console.error(e);
});
db.close();
```
## 数据库增删改查
```js
// 创建或打开一个数据库文件,在当前目录的data.db文件
let db = sqlite.open("./data.db", {version: 1}, {
onOpen: function(db) {
// 数据库打开时,执行创建数据库表的语句
// 我们设计的表名为STUDENT(学生),字段如下:
// id: 整数,自增,键
// name: 学生姓名,文本,非空
// age: 年龄,整数,非空
// score: 分数,整数
db.execSQL("CREATE TABLE IF NOT EXISTS STUDENT(" +
"`id` INTEGER PRIMARY KEY AUTOINCREMENT, " +
"`name` TEXT NOT NULL, " +
"`age` INTEGER NOT NULL, " +
"`score` INTEGER" +
")");
}
});
// 插入三个数据
log("插入张三: ", db.insert("STUDENT", {
name: "张三",
age: 18,
score: 90
}));
log("插入李四: ", db.insert("STUDENT", {
name: "李四",
age: 19,
score: 60
}));
log("插入王五: ", db.insert("STUDENT", {
name: "王五",
age: 20
}));
// 查询数据
log("所有数据: ", db.rawQuery("SELECT * FROM STUDENT", null).all());
log("第一个数据: ", db.rawQuery("SELECT * FROM STUDENT", null).single());
// 修改数据
log("修改李四分数: ", db.update("STUDENT", {score: 70}, "name = ?", ["李四"]));
log("修改后李四: ", db.rawQuery("SELECT * FROM STUDENT WHERE name = ?", ["李四"]).single());
// 删除数据
log("删除分数>80的学生: ", db.delete("STUDENT", "score > 80", null));
// 删除后遍历数据
log("删除后:");
let cursor = db.rawQuery("SELECT * FROM STUDENT", null);
while(cursor.moveToNext()) {
log(cursor.pick());
}
// 记得关闭cursor
cursor.close();
// 还要关闭数据库
db.close();
```