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 |