数据库

## 获取数据库信息 ```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(); ```