Unity与JS交互,对IndexedDB数据库进行操作
//新版本的unity提倡使用jslib。下面是旧版本使用记录
//涉及到使用数据库的增删改查:已下是打包完成后放到index.html下的scripts 块当中的
let dbName= '_IndexDB', version = 1
let db
//打开indexDB
function openDB(newStorName,indexOne,indexTwo,newVersion){
let indexedDB = window.indexedDB
const request = indexedDB.open(dbName, newVersion)
db=null;
request.onsuccess = function(event) {
db = event.target.result // 数据库对象
console.log('数据库打开成功')
SendResultBoolToUnity('true')
}
request.onerror = function(event) {
console.log('数据库打开报错')
SendResultBoolToUnity('false')
}
request.onupgradeneeded = function(event) {
// 数据库创建或升级的时候会触发
console.log('onupgradeneeded')
version = newVersion
db = event.target.result // 数据库对象
let objectStore
if (!db.objectStoreNames.contains(newStorName)) {
objectStore = db.createObjectStore(newStorName, { keyPath: 'id' }) // 创建表
objectStore.createIndex(indexOne, indexOne, { unique: false }) // 创建索引 可以让你搜索任意字段
objectStore.createIndex(indexTwo, indexTwo, { unique: false }) // 创建索引 可以让你搜索任意字段
}
}
}
function GetVersion()
{
try{
SendResultToUnity(db.version);
}
catch(err)
{
console.log('获取数据库版本信息错误:'+err)
SendResultToUnity("1");
}
}
// 添加数据
function adddata(nowStoreName, data) {
console.log(data);
var str= eval("("+data+ ")"); //传入的data是json字符串 需要转换为json对象
let request = db.transaction([nowStoreName], 'readwrite') // 事务对象 指定表格名称和操作模式("只读"或"读写")
.objectStore(nowStoreName) // 仓库对象
.add(str)
request.onsuccess = function(event) {
console.log('数据写入成功')
SendResultBoolToUnity('true')
}
request.onerror = function(event) {
console.log('数据写入失败')
SendResultBoolToUnity('false')
throw new Error(event.target.error)
}
}
//更新数据 json数据
function updateDB( nowStoreName, data) {
let request = db.transaction([nowStoreName], 'readwrite') // 事务对象
.objectStore(nowStoreName) // 仓库对象
.put(data)
return new Promise((resolve, reject) => {
request.onsuccess = function(ev) {
resolve(ev)
SendResultBoolToUnity('true')
}
request.onerror = function(ev) {
resolve(ev)
SendResultBoolToUnity('false')
}
})
}
//根据id获取表中的数据
function getDataByKey(nowStoreName, key) {
let transaction = db.transaction([nowStoreName]) // 事务
let objectStore = transaction.objectStore(nowStoreName) // 仓库对象
let request = objectStore.get(key)
request.onerror = function(event) {
console.log('事务失败')
}
request.onsuccess = function(event) {
console.log('主键查询结果: ', request.result)
SendResultToUnity(request.result);
}
}
//查询表中的所有数据
function cursorGetData(nowStoreName) {
let list = []
let store = db.transaction(nowStoreName, 'readwrite') // 事务
.objectStore(nowStoreName) // 仓库对象
let request = store.openCursor() // 指针对象
return new Promise((resolve, reject) => {
request.onsuccess = function(e) {
let cursor = e.target.result
if (cursor) {
// 必须要检查
list.push(cursor.value)
cursor.continue() // 遍历了存储对象中的所有内容
} else {
resolve(list)
console.log(list)
}
SendResultToUnity(list);
}
request.onerror = function(e) {
reject(e)
}
})
}
//查询数据,根据 属性值,属性
function getDataByIndexAndValue( nowStoreName, indexName, indexValue) {
let list = []
let store = db.transaction(nowStoreName, 'readwrite').objectStore(nowStoreName)
let request = store.index(indexName).openCursor(IDBKeyRange.only(indexValue))
return new Promise((resolve, reject) => {
request.onerror = function(e) {
reject(e)
}
request.onsuccess = function(e) {
let cursor = e.target.result
if (cursor) {
list.push(cursor.value)
cursor.continue() // 遍历了存储对象中的所有内容
//调用unity当中的方法
console.log(list)
}
SendResultToUnity(list);
}
})
}
//查询数据,根据 属性值
function getDataByIndex( nowStoreName, indexName) {
let list = []
let store = db.transaction(nowStoreName, 'readwrite').objectStore(nowStoreName)
let request = store.index(indexName).getAll()
return new Promise((resolve, reject) => {
request.onerror = function(e) {
reject(e)
console.log('失败');
}
request.onsuccess = function(e) {
console.log(e.target.result)
SendResultToUnity(e.target.result)
}
})
}
//删除数据
function deleteDB(nowStoreName, id) {
let request = db.transaction([nowStoreName], 'readwrite').objectStore(nowStoreName).delete(id)
request.onsuccess = function() {
console.log('数据删除成功')
SendResultBoolToUnity('true')
}
request.onerror = function() {
console.log('数据删除失败')
SendResultBoolToUnity('false')
}
}
//关闭数据库
function closeDB(){
db.close()
console.log('数据库关闭');
}
//js发送到unity 具体的数据 (字符串)
function SendResultToUnity(data){
unityInstance.SendMessage('GameStart','JsToUnityGetBookInfo',data)
}
//js发送到unity的 true false
function SendResultBoolToUnity(isSuccess){
unityInstance.SendMessage('GameStart','JsToUnityIsSuccess',isSuccess)
}
///////////
欢迎留言讨论

浙公网安备 33010602011771号