Create db.js
This commit is contained in:
parent
f998982439
commit
ca76f70e9c
|
@ -0,0 +1,304 @@
|
|||
//初始数据库结构
|
||||
const dbData = [
|
||||
{
|
||||
dbName: "masterDB", //数据库名称
|
||||
version: 1, //数据库版本号,当结构发生变化时
|
||||
tables: [ //表
|
||||
{
|
||||
name: "SYS_favorites", //表名称
|
||||
keyPath: "uid", //主键
|
||||
autoIncrement: false, //主键是否自增
|
||||
index: [ //索引
|
||||
{
|
||||
name: "name_index", //索引名称
|
||||
key: "name" //索引key
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "SYS_keyword",
|
||||
keyPath: "id"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
dbName: "guestDB",
|
||||
version: 1,
|
||||
tables: [
|
||||
{
|
||||
name: "MY_demo",
|
||||
keyPath: "id"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
// 使用示例
|
||||
// import DB from '@/utils/db'
|
||||
|
||||
// 初始化创建数据库 一般在项目启动时就执行了
|
||||
// await DB.create()
|
||||
|
||||
// 打开某个数据库,返回数据库实例
|
||||
// const database = await DB.open("dbName")
|
||||
|
||||
// 在打开的数据库中添加数据到tablenName表
|
||||
// await database.add("tablenName", data)
|
||||
|
||||
// 查询
|
||||
// await database.get("tablenName", key)
|
||||
|
||||
// 查询 根据索引
|
||||
// await database.indexGet("tablenName", "indexName", indexVal)
|
||||
|
||||
// 修改
|
||||
// await database.put("tablenName", data)
|
||||
|
||||
// 删除
|
||||
// await database.delete("tablenName", key)
|
||||
|
||||
// 获取所有
|
||||
// await database.getAll("tablenName")
|
||||
|
||||
// 清空某个表数据
|
||||
// await database.clear("tablenName")
|
||||
|
||||
// 获取某个表信息
|
||||
// database.getTable("tablenName")
|
||||
|
||||
// 获取所有表
|
||||
// database.getTables()
|
||||
|
||||
// 关闭数据库连接
|
||||
// database.close()
|
||||
|
||||
|
||||
export default {
|
||||
//建立数据库,表,初始数据
|
||||
create() {
|
||||
var promiseArray = []
|
||||
const addDB = db => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = indexedDB.open(db.dbName, db.version)
|
||||
request.onupgradeneeded = e => {
|
||||
const thisDB = e.target.result
|
||||
db.tables.forEach(item => {
|
||||
let table = null
|
||||
if (thisDB.objectStoreNames.contains(item.name)) {
|
||||
//已存在表,删除旧index
|
||||
table = e.target.transaction.objectStore(item.name)
|
||||
table.indexNames.length>0 && table.indexNames.forEach(indexName => {
|
||||
table.deleteIndex(indexName)
|
||||
})
|
||||
}else{
|
||||
//创建新的表
|
||||
table = thisDB.createObjectStore(item.name, {
|
||||
keyPath: item.keyPath,
|
||||
autoIncrement: item.autoIncrement
|
||||
})
|
||||
}
|
||||
//建立index
|
||||
item.index && item.index.forEach(ind => {
|
||||
table.createIndex(ind.name, ind.key, { unique: false })
|
||||
})
|
||||
})
|
||||
},
|
||||
request.onsuccess = e => {
|
||||
return resolve(e.target.result)
|
||||
}
|
||||
request.onerror = e => {
|
||||
return reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
dbData.forEach(db => {
|
||||
promiseArray.push(addDB(db))
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
Promise.all(promiseArray).then((e) => {
|
||||
resolve(e)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
//所有数据库
|
||||
databases(){
|
||||
return indexedDB.databases()
|
||||
},
|
||||
//打开数据库
|
||||
open(dbName){
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = indexedDB.open(dbName)
|
||||
request.onsuccess = e => {
|
||||
const database = new this.database(e.target.result)
|
||||
resolve(database)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
//删除数据库
|
||||
deleteDB(dbName){
|
||||
return indexedDB.deleteDatabase(dbName)
|
||||
},
|
||||
//数据库类
|
||||
database: function (IDBDatabase) {
|
||||
this.IDBDatabase = IDBDatabase
|
||||
|
||||
/**
|
||||
* 添加行数据
|
||||
* @param {string} tableName 表名
|
||||
* @param {object} data 数据
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.add = (tableName, data) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).add(data)
|
||||
request.onsuccess = e => {
|
||||
resolve(e)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改行数据,未查询到就新增
|
||||
* @param {string} tableName 表名
|
||||
* @param {object} data 数据
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.put = (tableName, data) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).put(data)
|
||||
request.onsuccess = e => {
|
||||
resolve(e)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除行
|
||||
* @param {string} tableName 表名
|
||||
* @param {string} key 主键
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.delete = (tableName, key) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).delete(key)
|
||||
request.onsuccess = e => {
|
||||
resolve(e)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键获取行
|
||||
* @param {string} tableName 表名
|
||||
* @param {string} key 主键
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.get = (tableName, key) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).get(key)
|
||||
request.onsuccess = () => {
|
||||
resolve(request.result || null)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据索引获取行
|
||||
* @param {string} tableName 表名
|
||||
* @param {string} indexName 索引库名称
|
||||
* @param {string} indexVal 索引值
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.indexGet = (tableName, indexName, indexVal) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).index(indexName).get(indexVal)
|
||||
request.onsuccess = () => {
|
||||
resolve(request.result || null)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有行
|
||||
* @param {string} tableName 表名
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.getAll = (tableName) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).getAll()
|
||||
request.onsuccess = () => {
|
||||
resolve(request.result || null)
|
||||
}
|
||||
request.onerror = e => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空表
|
||||
* @param {string} tableName 表名
|
||||
* @returns {promise}
|
||||
*/
|
||||
this.clear = (tableName) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName).clear()
|
||||
request.onsuccess = e => {
|
||||
resolve(e)
|
||||
}
|
||||
request.onerror = err => {
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表信息
|
||||
* @returns {IDBObjectStore}
|
||||
*/
|
||||
this.getTable = (tableName) => {
|
||||
const request = IDBDatabase.transaction([tableName], 'readwrite').objectStore(tableName)
|
||||
return request
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有的表
|
||||
* @returns {[IDBObjectStore]}
|
||||
*/
|
||||
this.getTables = () => {
|
||||
const tables = []
|
||||
for (let item of IDBDatabase.objectStoreNames) {
|
||||
tables.push(IDBDatabase.transaction([item], 'readwrite').objectStore(item))
|
||||
}
|
||||
return tables
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭数据库连接
|
||||
* @returns {}
|
||||
*/
|
||||
this.close = () => {
|
||||
return IDBDatabase.close()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue