WinJS indexDB和一些文件访问小结
2013-03-29 14:49
411 查看
一、indexDB
最近给win8的一个项目搞得晕头转向的,不过弄懂之后发现确实学到了很多东西,其中一个是关于数据存储的,window自带的类似数据库之类的东西,index database。其实最初index DB是用在web上用来存储数据的,但它在win8应用中同样可以使用,而且使用起来很方便,理解起来也很容易,需要注意的是一些规范之类的,稍微一个不细心都会存储失败或者读不到数据,index DB api里面对异常抛出的类型和原因都说得很清楚,这里就不多说了,就说一些index DB的用法
首先是创建一个index DB:
在创建数据成功后,在createDBVersionUpgrade(evt)函数里创建你的数据库里所含有的东西
首先获得该数据库的一个操作对象:MyDB.db = evt.target.result; 再获取transaction:var txn = evt.target.transaction;接着创建ObjectStore
var courseStore = MyDB.db.createObjectStore("courses", { keyPath: "divId", autoIncrement: true });
courseStore.createIndex("courseText", "courseText", { unique: false });
course是名字,keyPath从字面上理解就知道它的意思了,删除一条记录可根据它来删除,接着创建索引,索引不是一定得创建的,只是当你的数据需要用到索引的时候,创建其索引会带来很大的查询方便
至此你就创建了一个名为MyDB的数据库,里面有一个courses的objectstore
接来写数据读数据都得先打开数据库,其实跟代码部分跟创建时的差不了多少,只是这一次在打开成功后做的事情不同而已,同样需要获得操作对象evt.target.result
这时打开transaction:var txn = MyDB.db.transaction("courses", "readwrite");这样就打开了courses数据库,“readwrite”是对数据库的操作允许方式,这里设为可读写
读数据时,有一个openCursor函数:var courseCursorRequest = txn.objectStore("courses").index("courseText").openCursor();,有设置index的话就把index加上去,没有的话就不用
在courseCursorRequest 的onsuccess事件里读取courses里面的数据
continue函数即指针指向下一个记录,知道遍历完所有记录,才执行接下去的代码
写数据时,就不用调用openCursor函数,直接var courses = txn.objectStore("courses").index("courseText")
最常使用的就是add和delete操纵啦,直接用courses添加删除即可,同样在添加删除成功事件响应里也可以实现成功后要做的事情
大概就这些东西,其实也没什么好说的,创建删除数据库,读写数据库里的数据,最基本的就这些,目前自己使用到的也只有这些,说说要注意的地方吧,首先添加记录的时候,要注意是否已经存在了具有相同标识的记录,最好在添加失败的响应函数里做一些操作,提示一下,不然很容易就会添加失败然后找了很久都不知道什么原因,再就是删除操作,删除只需要一个参数,唯一标识记录的key,必须和原记录里的key是相同类型,这里一般情况下都可以根据keyPath去删除记录,这也很容易出错的操作
二、文件访问小结
学win8 APP开发学了这么久,一些细节的东西还是没留意到,感觉有点失败,最近纠结一个问题很久,今天一早不经意间就解决了这个问题。是这样的,我的应用里需要存储图片,然后我想把图片存到应用文件的目录下,即installedLocation,结果碰了一鼻子灰,纠结了一晚上,想着怎么把图片存到installedLocation的目录下,结果一查开发文档发现,installedLocation里面的东西是只读不可写的,这让我瞬间崩溃。其实为什么我会纠结图片存储的这个问题呢,原来在我获得一张图片的路径后我直接赋值给了img的src属性,结果出现一个中之操作的东西,具体的原因我不清楚,不过我猜大概又是什么安全问题的。
今天一早又起来继续纠结这个问题,其实Windows提供很多给用户存放appdata的目录,我就想着,行吧,存不进installedLocation,就存进可存的地方得了。结果又发现了一些细节的东西,原来引用installedLocation里的文件,需要在路径前面加ms-appx:///,引用Location里面的文件,要换成ms-appdata:///,这样,我的问题就解决了,我把图片存起来了,又得到了可寻的图片路径,其实这些细节的东西,平时真没怎么留意,非得在开发过程中才慢慢的遇到这些问题,下面分享一下外国的一遍关于文件访问的博文File
system places accessible through WinRT API
最近给win8的一个项目搞得晕头转向的,不过弄懂之后发现确实学到了很多东西,其中一个是关于数据存储的,window自带的类似数据库之类的东西,index database。其实最初index DB是用在web上用来存储数据的,但它在win8应用中同样可以使用,而且使用起来很方便,理解起来也很容易,需要注意的是一些规范之类的,稍微一个不细心都会存储失败或者读不到数据,index DB api里面对异常抛出的类型和原因都说得很清楚,这里就不多说了,就说一些index DB的用法
首先是创建一个index DB:
function createDB() { //创建一个indexDB var dbRequest = window.indexedDB.open("MyDB", 1); // Add asynchronous callback functions dbRequest.onerror = function () { console.log("Error creating database."); }; dbRequest.onsuccess = function (evt) {
//创建成功之后要做的事情 createDBSuccess(evt); }; dbRequest.onupgradeneeded = function (evt) {
//第一次创建数据库时要做的事情在此实现 createDBVersionUpgrade(evt); }; dbRequest.onblocked = function () { console.log("Database create blocked."); }; // Reset the flag that indicates whether this is a new creation request. // Assume that the database was previously created.
//下一打开indexDB时做的判断,如果已存在数据库则直接打开 dbCreate = false; }删除数据库只需语句var dbRequest = window.indexedDB.deleteDatabase("MyDB");同样在三个callback函数里实现要做的事情(onerror,onsuccess,onblocked)
在创建数据成功后,在createDBVersionUpgrade(evt)函数里创建你的数据库里所含有的东西
首先获得该数据库的一个操作对象:MyDB.db = evt.target.result; 再获取transaction:var txn = evt.target.transaction;接着创建ObjectStore
var courseStore = MyDB.db.createObjectStore("courses", { keyPath: "divId", autoIncrement: true });
courseStore.createIndex("courseText", "courseText", { unique: false });
course是名字,keyPath从字面上理解就知道它的意思了,删除一条记录可根据它来删除,接着创建索引,索引不是一定得创建的,只是当你的数据需要用到索引的时候,创建其索引会带来很大的查询方便
至此你就创建了一个名为MyDB的数据库,里面有一个courses的objectstore
接来写数据读数据都得先打开数据库,其实跟代码部分跟创建时的差不了多少,只是这一次在打开成功后做的事情不同而已,同样需要获得操作对象evt.target.result
这时打开transaction:var txn = MyDB.db.transaction("courses", "readwrite");这样就打开了courses数据库,“readwrite”是对数据库的操作允许方式,这里设为可读写
读数据时,有一个openCursor函数:var courseCursorRequest = txn.objectStore("courses").index("courseText").openCursor();,有设置index的话就把index加上去,没有的话就不用
在courseCursorRequest 的onsuccess事件里读取courses里面的数据
courseCursorRequest.onsuccess = function (e) { var cursor = e.target.result; if (cursor) { if (id == cursor.value.divId) { document.getElementById(id).innerText = cursor.value.courseText; } cursor.continue(); } };
continue函数即指针指向下一个记录,知道遍历完所有记录,才执行接下去的代码
写数据时,就不用调用openCursor函数,直接var courses = txn.objectStore("courses").index("courseText")
最常使用的就是add和delete操纵啦,直接用courses添加删除即可,同样在添加删除成功事件响应里也可以实现成功后要做的事情
大概就这些东西,其实也没什么好说的,创建删除数据库,读写数据库里的数据,最基本的就这些,目前自己使用到的也只有这些,说说要注意的地方吧,首先添加记录的时候,要注意是否已经存在了具有相同标识的记录,最好在添加失败的响应函数里做一些操作,提示一下,不然很容易就会添加失败然后找了很久都不知道什么原因,再就是删除操作,删除只需要一个参数,唯一标识记录的key,必须和原记录里的key是相同类型,这里一般情况下都可以根据keyPath去删除记录,这也很容易出错的操作
二、文件访问小结
学win8 APP开发学了这么久,一些细节的东西还是没留意到,感觉有点失败,最近纠结一个问题很久,今天一早不经意间就解决了这个问题。是这样的,我的应用里需要存储图片,然后我想把图片存到应用文件的目录下,即installedLocation,结果碰了一鼻子灰,纠结了一晚上,想着怎么把图片存到installedLocation的目录下,结果一查开发文档发现,installedLocation里面的东西是只读不可写的,这让我瞬间崩溃。其实为什么我会纠结图片存储的这个问题呢,原来在我获得一张图片的路径后我直接赋值给了img的src属性,结果出现一个中之操作的东西,具体的原因我不清楚,不过我猜大概又是什么安全问题的。
今天一早又起来继续纠结这个问题,其实Windows提供很多给用户存放appdata的目录,我就想着,行吧,存不进installedLocation,就存进可存的地方得了。结果又发现了一些细节的东西,原来引用installedLocation里的文件,需要在路径前面加ms-appx:///,引用Location里面的文件,要换成ms-appdata:///,这样,我的问题就解决了,我把图片存起来了,又得到了可寻的图片路径,其实这些细节的东西,平时真没怎么留意,非得在开发过程中才慢慢的遇到这些问题,下面分享一下外国的一遍关于文件访问的博文File
system places accessible through WinRT API
相关文章推荐
- JavaScript函数的一些注意要点小结及js匿名函数
- [转]一些web开发中常用的、做成cs文件的js代码
- js文件中获取项目访问路径
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- JS获取文件大小方法小结
- WEB项目部署到Linux下无法访问html、css、js等静态文件的解决
- Spring MVC如何访问到静态的文件,如jpg,js,css?
- 一些web开发中常用的、做成cs文件的js代码
- 如何访问到静态的文件,如jpg,js,css?
- 给js文件加一些参数
- js事件代理和js知识一些小结1
- [导入]一些web开发中常用的、做成cs文件的js代码 - 搜刮来的
- 一些常用的js读写文件,排序等
- 【原创】集群远程访问和管理以及查看作业和文件的一些技巧
- SpringMVC访问静态文件,如:jpg,js,css等,<mvc:resources/>标签的使用
- Spring mvc 项目中页面访问不到静态文件,如img , js , css 等
- 黄聪:一些文件上传组件(Flash,JQuery,asp,php,js,AJAX)
- SPRING-MVC访问静态文件,如jpg,js,css
- js文件,同样的路径,拷贝过来的为什么不能访问
- SpringMvc教程(七)--如何访问到静态的文件,如jpg,js,css?