-
打开 manifest.json,进入「App模块权限配置」,勾选 SQLite (数据库) 选项

-
创建 static/sqlite/sqlite.js 文件进行统一管理
javascript
// 数据库名称
const dbName = 'scan'
// 数据库地址
const dbPath = '_downloads/scan.db'
// 判断数据库是否打开
const isOpen = () => {
var open = plus.sqlite.isOpenDatabase({
name: dbName,
path: dbPath,
})
return open
}
// 创建/打开数据库
const openSqlite = () => {
return new Promise((resolve, reject) => {
plus.sqlite.openDatabase({
name: dbName,
path: dbPath,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 关闭数据库
const closeSqlite = () => {
return new Promise((resolve, reject) => {
plus.sqlite.closeDatabase({
name: dbName,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 建表
const createTable = (dbTable, data) => {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: dbName,
sql: `CREATE TABLE IF NOT EXISTS ${dbTable}(${data})`,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 插入数据
const insertTableData = (dbTable, data) => {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: dbName,
sql: `INSERT INTO ${dbTable} VALUES (${data})`,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 查询数据
const selectTableData = (dbTable, lname, lvalue) => {
return new Promise((resolve, reject) => {
let sql = `SELECT * FROM ${dbTable}`
if (lname) {
sql += ` WHERE ${lname} = '${lvalue}'`
}
plus.sqlite.selectSql({
name: dbName,
sql: sql,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 删除数据
const deleteTableData = (dbTable, lname, lvalue) => {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: dbName,
sql: `DELETE FROM ${dbTable} WHERE ${lname} = '${lvalue}'`,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 更新数据
const updateTableData = (dbTable, data, lname, lvalue) => {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: dbName,
sql: `UPDATE ${dbTable} SET ${data} WHERE ${lname} = '${lvalue}'`,
success(e) {
resolve(e)
},
fail(e) {
reject(e)
},
})
})
}
// 导入数据
const importTableData = (sql) => {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: dbName,
sql: sql,
success(e) {
resolve(e)
},
fail(e) {
console.log(e);
reject(e)
},
})
})
}
// 获取所有表名
const getAllTables = () => {
return new Promise((resolve, reject) => {
// SQLite 系统表 sqlite_master 存储表结构信息
plus.sqlite.selectSql({
name: dbName,
sql: `SELECT name FROM sqlite_master WHERE type='table'`,
// sql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'";
success: (data) => {
const tables = data.map(item => item.name);
resolve(tables);
},
fail: (e) => reject(`查询表失败: ${JSON.stringify(e)}`)
});
});
}
// 获取表的建表语句
const getTableCreateSql = (tableName) => {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: dbName,
sql: `SELECT sql FROM sqlite_master WHERE type='table' AND name='${tableName}'`,
success: (data) => {
const createSql = data[0]?.sql || '';
resolve(`${createSql};\n`); // 添加分号和换行
},
fail: (e) => reject(`查询建表语句失败: ${JSON.stringify(e)}`)
});
});
}
// 获取表数据并生成 INSERT 语句
const getTableDataSql = (tableName) => {
return new Promise((resolve, reject) => {
// 先查询表的所有字段
plus.sqlite.selectSql({
name: dbName,
sql: `PRAGMA table_info(${tableName})`,
success: (columnsData) => {
const columns = columnsData.map(col => col.name);
const columnsStr = columns.join(',');
const placeholders = columns.map(() => '?').join(',');
// 查询表数据
plus.sqlite.selectSql({
name: dbName,
sql: `SELECT * FROM ${tableName}`,
success: (data) => {
if (data.length === 0) {
resolve(''); // 无数据则返回空
return;
}
// 生成 INSERT 语句
let insertSql =
`INSERT INTO ${tableName} (${columnsStr}) VALUES\n`;
data.forEach((row, index) => {
const values = columns.map(col => {
const value = row[col];
// 处理字符串类型(添加单引号,转义内部单引号)
if (typeof value === 'string') {
return `'${value.replace(/'/g, "''")}'`;
}
// 处理 null/undefined
return value === null || value ===
undefined ? 'NULL' : value;
}).join(',');
insertSql +=
`(${values})${index === data.length - 1 ? ';\n' : ',\n'}`;
});
resolve(insertSql);
},
fail: (e) => reject(`查询表数据失败: ${JSON.stringify(e)}`)
});
},
fail: (e) => reject(`查询表结构失败: ${JSON.stringify(e)}`)
});
});
}
// 导出方法
export default {
isOpen,
openSqlite,
closeSqlite,
createTable,
insertTableData,
selectTableData,
deleteTableData,
updateTableData,
importTableData,
getAllTables,
getTableCreateSql,
getTableDataSql
}