auto.js 中文文档 下载 App

SQLite 数据库与 SharedPreferences——结构化数据持久化

简单键值对

// Auto.js 内置的 storages(类似 SharedPreferences)
var storage = storages.create("my_app_config");

storage.put("username", "test_user");
storage.put("login_count", 5);

var user = storage.get("username");
var count = storage.get("login_count", 0); // 带默认值

数据保存在 Auto.js 内部存储,卸载会清除。

SQLite 数据库

打开数据库

var db = sqlite.open("/sdcard/data.db", {
  // 如果数据库不存在会自动创建
});

建表

db.execSQL("CREATE TABLE IF NOT EXISTS tasks (" +
  "id INTEGER PRIMARY KEY AUTOINCREMENT," +
  "title TEXT NOT NULL," +
  "status TEXT DEFAULT 'pending'," +
  "created_at INTEGER" +
")");

插入数据

db.insert("tasks", {
  title: "每日签到",
  status: "pending",
  created_at: Date.now()
});

查询

var cursor = db.rawQuery("SELECT * FROM tasks WHERE status = ?", ["pending"]);
while (cursor.moveToNext()) {
  var title = cursor.getString(cursor.getColumnIndex("title"));
  log("待办:" + title);
}
cursor.close();

更新 / 删除

db.update("tasks", { status: "done" }, "id = ?", [1]);
db.delete("tasks", "status = ? AND created_at < ?", ["done", oldTime]);

关闭数据库

db.close();

实战:每日签到记录

var db = sqlite.open("/sdcard/signin.db");

db.execSQL("CREATE TABLE IF NOT EXISTS records (" +
  "date TEXT PRIMARY KEY, app TEXT, status TEXT)");

// 签到完成后记录
db.insert("records", {
  date: new Date().toISOString().slice(0, 10),
  app: "淘宝",
  status: "success"
});

// 查今天是否已签到
var cur = db.rawQuery(
  "SELECT * FROM records WHERE date = ? AND app = ?",
  [today, "淘宝"]
);
if (cur.moveToFirst()) {
  log("今天已签到过");
} else {
  log("还没签到");
}
cur.close();
db.close();

何时用哪个

需求推荐方案
几个配置项(开关、ID)storages.create()
整个配置对象JSON 文件 + files.write
大量结构化数据(任务、记录)SQLite
临时数据传递clipboard
联网获取数据http.get + JSON.parse