ラベル Store App の投稿を表示しています。 すべての投稿を表示
ラベル Store App の投稿を表示しています。 すべての投稿を表示

2016年2月1日月曜日

Indexed Databaseの使い方 02

前回の記事では、Indexed DBの作成の仕方を説明しました。
今回の記事では、作成したデータベースにデータを入れていきます。

前回のおさらいです。
コードは以下になります。

var dbName = "databasename";
var dbVersion = 1;
var indexedDB = window.indexedDB || window.webkitindexedDB || window.mozIndexedDB;
var request = indexedDB.open(dbName,dbVersion);
request.onupgradeneeded() = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("objectstorename",{keypath:"key"})
objectStore.createIndex("firstIndex","firstIndexKeyPath");
}

少し話がずれますが、大事なことなので、作成環境について説明します。
Indexed DBの作成は、HTML5とJavaScriptですが、サーバーが必要になります。
何故なら、Indexed DBはSame Origin Policyを使っています。
これはドメインが違ったら、データベースにアクセス出来ないようになっている、ということです。
XSS(クロスサイトスクリプティング)予防のためです。


では、本題のデータを入れていく話に戻りましょう。

request.onupgradeneeded() = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("objectstorename",{keyPath:"key"})
objectStore.createIndex("firstIndex","firstIndexKeyPath");
objectStore.add({firstIndexKeyPath:"firstIndexのバリュー",key:"キーのバリュー"})
}

これは、こういう事です。
{objectstorename:{key:"キーのバリュー",firstIndexKeyPath:"firstIndexのバリュー"}}
この方法は、onupgradeneededの時に、データを入れる方法です。
が、基本的の形は一緒です。objectStore.add()で入れます。

いつもアップグレードする訳ではありません。
なので、普通の場合はこうなります。
request.onsuccess()=function(){
var db = event.target.result;
var transaction = db.transaction("objectstorename", "readwrite");
var objectStore = transaction.objectStore("objectstorename");
objectStore.add({firstIndexKeyPath:"firstIndexのバリュー",key:"キーのバリュー"});

transaction.oncomplete=function(event){
alert("追加完了");
}
transaction.onerror = function(event) {
alert ('追加失敗.');
}
db.close()
}
となります。

この時点で、もうよくわからない?
もがいてください笑

データベースの消し方はindexedDB.deleteDatabase("データベース名");となるので、
var req = indexedDB.deleteDatabase(dbName);
req.onblocked = function(){
 alert("Got Blocked on Deleting Database. Please close other tabs and reload.");
 };
req.onsuccess = function(){
 alert("Deleted Database Successfully");
}; 
req.onerror=function(){
 alert("Error on Deleting Database");
};
となります。

エラーやブロックされる場合は、実力行使ですね。
実際のファイルを消すという方法もあります。

2016年1月31日日曜日

Indexed Databaseの使い方 01

HTML5で使えるデータベースのIndexed DBの使い方のメモです。
2016年1月現在のAPIです。
現段階では準拠なので、正式決定の際に変更の場合があります。
APIが変更になったら、使えない場合があるので、確認してください。

まず始めに、データベースの名前を変数に入れます。
var dbName = "databasename";
次に、データベースのバージョンを整数で変数に入れます。
var dbVersion = 1;
小数点を入れると、動きません。
次にブラウザーが違う場合でも動くように
var indexedDB = window.indexedDB || window.webkitindexedDB || window.mozIndexedDB;
と、indexedDBの変数を作ります。

この三つが必要となる変数です。
では、Indexed DBに接続しましょう。

接続には、indexedDB.open(データベースの名前,データベースのバージョン)となります。
今回の例の場合は、
indexedDB.open(dbName,dbVersion)で開きます。
これを変数に入れます。
var request = indexedDB.open(dbName,dbVersion);

読者の中で、疑問に思う方もいるでしょう。
「え?データベース作ってないのに、接続すんの?」
はい、そうなんです。
無くても接続なんです。

ここが、第一関門。
request.onupgradeneeded()で、データベースを作成します。
これの理屈はこうです。
データベースが無い場合はバージョン0と認識されます。
また、もしデータベースが存在して、そのバージョンがdbVersionより小さい場合は、データベースのアップグレードが行われます。

では、データベースの中を作っていきましょう。
Indexed DBはMongo DBのようなモノです。
テーブルはありませんが、テーブルの変わりに、ObjestStoreというモノを作ります。
ObjectStoreは連想配列です。
createObjectStore()で、ObjectStoreを作ります。
createObjectStore("ObjectStore名",{keyPath:"keypathname"})
最初の引数は、ObjectStoreの名前、関係DBでいうテーブル名です。
その次の引数は、連想配列になります。Keyはkeypath(プライマリーキーみたいなモノ)、ValueはkeyPathの名前になります。
そして、ObjectStoreの中にcreateIndex()でIndexを作り、各Indexがデータフィールドとなります。
createIndex("インデックス","インデックスキーパス",{unique:false})は最低二つの引数を必要とします。最後の{unique:false}はオプションです。{unique:true}とすると、同じデータが入らなくなります。

request.onupgradeneeded() = function(event){
var db = event.target.result;
var objectStore = db.createObjectStore("objectstorename",{keyPath:"key"})
objectStore.createIndex("firstIndex","firstIndexKeyPath");
}

これで、データベースが出来ました。
次の記事でデータベースにデータの入れ方を書きます。

2016年1月28日木曜日

Windows Store Appについて 01

Windows Store Appを甘く見ていました。
よくよくよく、考えてみると、面白いですね。
まさに、モバイルアプリ戦国時代と例えることが出来ると思います。
どういうことか、説明しましょう。

モバイル端末の革命はiPhoneから始まったと考えてみましょう。
小型コンピュータであった携帯電話が、さらにコンピュータ化しました。
iモードなどでアプリをダウンロードし、携帯にアプリを入れる時代は来ていましたが、App Storeの登場により、モバイル端末アプリ市場が急速に拡大しました。
これに追随するように、Android端末が出ました。
スマートフォンの普及が進むにつれて、各陣営はアプリの市場を手に入れました。

また、開発者にとってもおいしい話でした。
アプリを販売し収入を得たり、アプリからの広告で収入を得たり、既存のWebアプリの市場を奪っていきました。
Webという共通のプラットフォームから脱却し、OS空間でのアプリという市場。OSの元締めからしたら、おいしい話です。

Windows8からモバイル端末を意識した、Store Appが出来ました。完全に、OS空間でのアプリ市場を見据えたモノです。
私は、てっきり、C#を使った一つの言語空間だとばかり思っていました。

しかし!!!

Javascript、HTML、CSSを使ってアプリの作成が出来るという、WebアプリもStore Appで利用できるという、開発者にとってはありがたい話です。
iOS用、Android用と、開発者はそれぞれの言語を理解し、場合によっては勉強する必要があります。
HTML、CSS、Javascriptを使えるフロントエンドデベロッパーが、アプリを作れるというのは、とんでもない開発者の囲い込み/取り込みのようにしか私には思えません。

今後、HTML5が発展・普及するにつれて、Webアプリは、今までパイを奪ってきたモバイルアプリ市場から、パイを奪い返すことになります。
アプリをダウンロードせずに、URLにアクセスするだけで使えるアプリ。
HTML5についてる、IndexedDBを使ったアプリは今後増えることでしょう。

IndexedDBの問題点は、まだ技術的に確定していないことです。
2014年に、IndexedDBを使ったアプリを開発したことがありますが、その時は泣きを見ました。
DBへの接続方法が、大きく変わり、ブログで公開されている方法を試してみても動かなかったのです。

Windows Store Appは、Web Appに対応している。
なんというズルでしょうか。
Visual Studioになんで、JavaScriptがあるんだろう、と思っていました。
ふと気になって、Windows Store App JavaScriptと調べて見ると、げげげげーと。
2014年当時から、出来てたのに、そんなこともしらずにWebApp作ってましたよ。
まぁ、Windowsのモバイル端末やStore Appがどれほど普及してるかは、別問題ですけど、Windowsですよ。
でかいマーケットだと思いますよ。
どーですか、フロントエンドデベロッパーの皆さん。
Windows Store App作りませんか?