10.openDatabase の第三引数(displayName)
第三引数は、ディスプレイ名ということになっています。何でしょう?
やってみます。
openDatabase("myDB1","1.0");
openDatabase("mydisplayName2","1.0","displayName is ほげ");
第三引数無しと有りです。で、ディスプレイ名とは何でしょう?
たぶんこれかな?と思うわけです。
日本語も使えています。
11.openDatabase の第四引数(size)
第四引数は、サイズです。データベースファイルのサイズで、単位はbytesです。
これは、セキュリティのこともありますので少し気になります。
デフォルトで最大サイズが5MBだったことは、前項の画像でもわかりますが、これを指定するとどうなるのでしょうか?
やってみましょう。
openDatabase("size","1.0","テスト",60000);
指定したサイズ(60000 byte 約0.057MB)とは関係なく5MBと表示されています(いいのかな?)。
12.データベースの最大サイズは?
では、5MB(5242880byte)を超えたり逆に0byteだったりするとどうなるでしょう?
openDatabase("size 0 byte","1.0","サイズ 0",0);
openDatabase("size 1 byte","1.0","サイズ 1",1);
openDatabase("size 5000000 byte","1.0","サイズ 5000000",5000000);
openDatabase("size 5000001 byte","1.0","サイズ 5000001",5000001);//一回目
openDatabase("size 5200000 byte","1.0","サイズ 5200000",5200000);
openDatabase("size 5200001 byte","1.0","サイズ 5200001",5200001);
openDatabase("size 5200002 byte","1.0","サイズ 5200002",5200002);
openDatabase("size 5200003 byte","1.0","サイズ 5200003",5200003);
openDatabase("size 5200004 byte","1.0","サイズ 5200004",5200004);
openDatabase("size 5200005 byte","1.0","サイズ 5200005",5200005);
openDatabase("size 5200010 byte","1.0","サイズ 5200010",5200010);
openDatabase("size 5200100 byte","1.0","サイズ 5200100",5200100);//再起動後
openDatabase("size 5210000 byte","1.0","サイズ 5210000",5210000);
openDatabase("size 5240000 byte","1.0","サイズ 5240000",5240000);
openDatabase("size 5242000 byte","1.0","サイズ 5242000",5242000);
openDatabase("size 5242800 byte","1.0","サイズ 5242800",5242800);
openDatabase("size 5242879 byte","1.0","サイズ 5242879",5242879);
openDatabase("size 5242880 byte","1.0","サイズ 5242880",5242880);
openDatabase("size 5242881 byte","1.0","サイズ 5242881",5242881);
openDatabase("size 6000000 byte","1.0","サイズ 6000000",6000000);
openDatabase("size 10485760 byte","1.0","サイズ 10485760",10485760);
openDatabase("size 104857600 byte","1.0","サイズ 104857600",104857600);
openDatabase("size 524288000 byte","1.0","サイズ 524288000",524288000);
一回目は次のように、size 5000001 byteまで生成されました。でも 5000001 byteは5MBではありません。4.768MBです。それでも、最大サイズは5MBと表示されています。
試しに、1度電源を切って再起動してから試したら、今度は次のように、size 5200100 byteまで生成されました。でも 5200100 byteも5MBではありません。4.9592MBです。そして、最大サイズはこれも5MBと表示されています。
推測ですが、このサイズは残メモリなども影響しつつ?動的にリミッターがかかるのかもしれません。いずれにしても、約5MBを超える指定は無視されます。
この約5MBの「約」という動作の仕方が少しいやな感じですが、どうせ、指定なしでも、0byteを指定しても、5MBになってしまうので、あまり深く考えずに、第四引数は省略してiPhoneにおまかせで良いのかもしれません。
ユーザー側のキャパを超えることはできないわけですし。
ちなみに、例外はどうでしょうか?
try{
openDatabase("size 1000000000 byte","1.0","サイズ 1000000000",1000000000);
} catch(e) {
alert(e);//ダイアログは表示されません。
}
エラーは出ずに、無視されます。コンソールにも何も表示されません。ただ、無視されます。
これが、PC版のSafariだと、[設定]-[セキュリティ]の中で、「規定のデータベースの最大サイズ」を
1,5,10,50,100,500MBの中から選択できるようになっていますが、iPhoneは携帯であるためか、小さく、単純な設定になっているわけです。
13.データベースの最大個数は?
データベース1個あたりの最大サイズは5Mでしたが、では、何個作れるのでしょう?これは、iPhone 8Gバイトモデルと16Gバイトモデルでは異なるかもしれません。
今回は、16Gバイトモデルで試しました。試したコードは次のとおり。一応1byteで100回まわしています。
function createDB(){
cnt=0;
setInterval(function(){
if(cnt<100)
openDatabase("size"+cnt,"1.0","sizeテスト",1);
cnt++
},100
)
}
createDB();
この結果、1回目は30個できました。1byte指定でも前項のとおり5MBできてしまうので、5MB×30で150MB分です。
次に、クリアして、再起動し、もう一度試したら、今度は55個できました。275MB分です。
その後、他のDBを作成したり、もう一度繰り返したりしていると、今日のところは、100個以上は楽に作れることまでは確認しました。
生成されたデータベースの削除は、iPhoneユーザーは、設定から行うわけですが、一括選択での削除ができず、1個1個削除しなければならないので、結構面倒です。
これだけ一気に生成するのに、何の警告メッセージも出ませんでしたので、少し問題かな?と思います。