4.データベースを開く
データベースオープンは、新規データベース作成と同じです。
var mydb = openDatabase("myDB1");
指定されたデータベースが存在しなければ新規データベースを作成して開き、存在すれば、単にオープンだけを行います。
この動作は、コマンドsqlite3でDBファイルを生成してオープン、DBファイルがあればオープンというsqliteの動作に対応している感じです。
では、次にopenDatabaseメソッドの書式を確認してみます。
5.openDatabaseのSyntax
| 説明 | データベース生成またはオープン |
| オブジェクト | Database |
| 書式 | openDatabase(name[,version[,displayName[,size]]]) |
| 引数 |
| name | データベース名 |
| version | バージョン |
| displayName | ディスプレイ名 |
| size | 最大サイズ(bytes) |
|
| 戻値 | データベースオブジェクト |
6.openDatabase の第二引数(version)
前述の通り、openDatabase の第一引数にはデータベース名を指定しますが、第二引数には、
データベースのバージョンを指定します。
前回のmyDB1は一旦削除してから試します。
次の結果はどうなるでしょう?第二引数を変えてopenDatabaseメソッドを立て続けに3つ実行してみます。3つのデータベースができるのでしょうか?
var mydb2 = openDatabase("myDB2");
var mydb3 = openDatabase("myDB2","1.0");
var mydb4 = openDatabase("myDB2","2.2");
こうなります。
つまり、バージョンを変えても、データベースはひとつ ( ここでは最初に実行した myDB2 ) しかできません。
ただ、上記のような書き方をすると、データベースはひとつしかできませんが、例外エラーが投げられます。
*ちなみに画面に「undefined」とあるのは、openDatabaseの第三引数「displayName」を省略しているためです。
7.バージョン番号ミスマッチ エラー
前項のソースにtry文を挟んでエラーを補足してみました。
var mydb2 = openDatabase("myDB2");
try{
var mydb3 = openDatabase("myDB2","1.0");
} catch(e) {
alert(e);
//バージョン番号ミスマッチ でエラーが出ます
//INVALID_STATE_ERR: DOM Exception 11
}
こうなります。
つまり、openDatabaseメソッドの第二引数は、第一引数であるデータベースを一つに対して複数設定できますが、いきなり異なる番号を使うとエラーが出るということですね(バージョン変更には後述のchangeVersionメソッドを使います)。ただし、複数といっても同時にではなく、有効なのは現在のバージョンcurrent versionひとつだけです。
これを管理することで、製作者は、古いスキーマ(DB構造)で書かれたデータベースを破壊することなくバージョンアップさせていくことができるようになります。
8.バージョン番号を調べる
バージョン番号はプロパティversionで調べることができます。readonlyです。
var mydb3 = openDatabase("myDB3","1.0")
alert(mydb3.version)
こうなります。
9.バージョン番号を書き換える
データベースのバージョン番号はchangeVersionメソッドで書き換えることができます。
mydb4 = openDatabase("myDB4","1.0")
alert(mydb4.version) //1.0
mydb4.changeVersion('1.0','2.0');
alert(mydb4.version) //2.0
これで、最初が1.0、次に2.0のダイアログが表示されます。つまり、第一引数を旧バージョンとして、第二引数に指定した2.0へ書き換えられたわけです。
Web製作者は、自分がリリースしているデータベースのバージョンが変わったら、iPhoneにストックされているデータベースのバージョンを確認して修正する必要があるかもしれません(要あとで確認)。
とりあえず、このメソッドchangeVersionの書式確認は後にまわして、次に、openDatabaseメソッドの第三引数と第四引数へ進みます。