提交 85bdf82a authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 b94a2268
#Mon Nov 19 20:09:20 CET 2007
#Sat Nov 24 19:01:03 CET 2007
javac=javac
benchmark.drivers.dir=C\:/data/java
path.servlet.jar=C\:/data/classpath/servlet-api.jar
version.name.maven=1.0.61
version.name.maven=1.0.62
path.lucene.jar=C\:/data/classpath/lucene-core-2.2.0.jar
jdk=1.4
......@@ -78,7 +78,7 @@ Example:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.0.61</version>
<version>1.0.62</version>
</dependency>
</pre>
<p>
......
......@@ -15,10 +15,10 @@ H2 Database Engine
<h1>Downloads</h1>
<h3>Version 1.0.61 (2007-11-10, Current)</h3>
<h3>Version 1.0.62 (2007-11-25, Current)</h3>
<p>
<a href="http://www.h2database.com/h2-setup-2007-11-10.exe">Windows Installer</a><br />
<a href="http://www.h2database.com/h2-2007-11-10.zip">Platform-Independent Zip</a><br />
<a href="http://www.h2database.com/h2-setup-2007-11-25.exe">Windows Installer</a><br />
<a href="http://www.h2database.com/h2-2007-11-25.zip">Platform-Independent Zip</a><br />
</p>
<h3>Download Mirror</h3>
......
......@@ -31,17 +31,17 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
<table style="border: 0px; margin: 5px; background-color: #eee;">
<tr><td style="border: 0px; background-color: #eee;" colspan="2">
<h3>Download</h3>
Version 1.0.61 (2007-11-10):
Version 1.0.62 (2007-11-25):
</td></tr>
<tr><td style="border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-setup-2007-11-10.exe"><img border="1" src="images/download.png" alt="download" /></a>
<a href="http://www.h2database.com/h2-setup-2007-11-25.exe"><img border="1" src="images/download.png" alt="download" /></a>
</td><td style="vertical-align: middle; border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-setup-2007-11-10.exe">Windows Installer (2.8 MB)</a>
<a href="http://www.h2database.com/h2-setup-2007-11-25.exe">Windows Installer (2.8 MB)</a>
</td></tr>
<tr><td style="border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-2007-11-10.zip"><img border="1" src="images/download.png" alt="download" /></a>
<a href="http://www.h2database.com/h2-2007-11-25.zip"><img border="1" src="images/download.png" alt="download" /></a>
</td><td style="vertical-align: middle; border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-2007-11-10.zip">All platforms (zip, 3.9 MB)</a>
<a href="http://www.h2database.com/h2-2007-11-25.zip">All platforms (zip, 3.9 MB)</a>
</td></tr>
<tr><td style="border: 0px; background-color: #eee;" colspan="2">
<a href="download.html">All Downloads</a>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -1969,7 +1969,7 @@ jdbc:h2:mem:
#jdbc:h2:zip:&lt;zipFileName&gt;!/&lt;databaseName&gt;
@features_1209_td
#jdbc:h2:zip:db.zip!/test #他の設定の変更
#jdbc:h2:zip:db.zip!/test
@features_1210_td
他の設定の変更
......@@ -5085,903 +5085,3 @@ PUBLICはスキーマ、TESTはテーブル名です。カラム名のリスト
@tutorial_1144_p
Javaアプリケーション内からインデックスを呼び出すことも可能です:
@~build_1005_h2
ポータビリティ
@~build_1006_p
このデータベースはJavaによって記述されているため、多くのプラットフォームで動作します。また、GCJを利用することで、ネイティブでも実行可能に(ネイティブコードに)コンパイルすることが可能です
@~build_1007_h2
環境
@~build_1008_p
#A Java Runtime Environment (JRE) version 1.4 or higher is required to run this database.
@~build_1010_li
Windows XP
@~build_1016_h2
ソフトウェアのビルド
@~build_1017_p
コマンドライン上でsrcディレクトリに移動し、以下のコマンドを実行してください:
@~build_1021_h2
Maven 2 の利用
@~build_1022_h3
Centralリポジトリの利用
@~build_1023_p
依存関係を取ることで、Maven 2プロジェクトでデータベースを組み込むことも可能です。例:
@~build_1024_h3
スナップショットバージョンの利用
@~build_1026_p
実行後、Maven2プロジェクトにH2DBを依存させ組み込むことが出来るようになります:
@~features_1028_h2
特徴一覧
@~features_1029_h3
主な特徴
@~features_1030_li
非常に高速なデータベースエンジン
@~features_1031_li
無料、ソースコード付き
@~features_1032_li
Javaで記載
@~features_1037_h3
追加された特徴
@~features_1040_li
複数の接続、テーブルレベルのロック
@~features_1044_h3
SQLサポート
@~features_1047_li
内部結合と外部結合、サブクエリー、読み取り専用ビューとインラインビュー
@~features_1055_h3
セキュリティの特徴
@~features_1058_li
ユーザーパスワードは決してプレーンテキストでネットワーク上に送信されることはない (たとえ不安定な接続を使用していたとしても)
@~features_1063_h3
他の特徴とツール
@~features_1066_li
多次元のインデックスをサポート
@~features_1078_h2
他のデータベースエンジンと比較する
@~features_1079_th
特徴
@~features_1080_th
H2
@~features_1081_th
Derby
@~features_1082_th
HSQLDB
@~features_1083_th
MySQL
@~features_1085_td
エンベッドモード (Java)
@~features_1086_td
対応
@~features_1087_td
対応
@~features_1088_td
対応
@~features_1089_td
非対応
@~features_1139_h3
DerbyとHSQLDB
@~features_1140_p
予期しない過程での終了後 (例:電源異常)、H2はユーザーの相互作用なしで安全に、自動的に回復することができます。DerbyとHSQLDBでは、いくつかの手動のステップが必要とされます ('Another instance of Derby may have already booted the database' / 'The database is already in use by another process')。
@~features_1141_h3
DaffodilDbとOne$Db
@~features_1142_p
このデータベースの開発は止まっているようです。最後のリリースは2006年2月でした。
@~features_1143_h3
McKoi
@~features_1144_p
このデータベースの開発は止まっているようです。最後のリリースは2004年8月でした。
@~features_1145_h2
#H2 in Use
@~features_1146_p
#For a list of applications that work with or use H2, see: <a href="http://groups.google.com/group/h2-database/web/h2-in-use">http://groups.google.com/group/h2-database/web/h2-in-use</a>
@~features_1147_h2
接続モード
@~features_1148_p
以下の接続モードがサポートされています:
@~features_1149_li
JDBC (エンベッド) を使用しているローカル接続
@~features_1150_li
TCP/IP上でJDBCを使用しているリモート接続 (クライアント/サーバー)
@~features_1151_li
TCP/IP上でODBCを使用しているリモート接続 (クライアント/サーバー)
@~features_1152_li
インメモリデータベース (プライベートと共有)
@~features_1152_p
以下の接続モードがサポートされています:
@~features_1153_h2
データベースURL概要
@~features_1153_li
JDBC (エンベッド) を使用しているローカル接続
@~features_1154_p
このデータベースは、データベースに接続している時、複数の接続モードと特徴をサポートしています。これは、異なったデータベースのURLを使用することにより可能となります。URLの設定は大文字と小文字を区別していません。
@~features_1155_th
トピック
@~features_1156_th
URLフォーマットと例
@~features_1157_h2
データベースURL概要
@~features_1157_td
エンベッド (ローカル) 接続
@~features_1158_p
このデータベースは、データベースに接続している時、複数の接続モードと特徴をサポートしています。これは、異なったデータベースのURLを使用することにより可能となります。URLの設定は大文字と小文字を区別していません。
@~features_1158_td
jdbc:h2:[file:][&lt;path&gt;]&lt;databaseName&gt;
@~features_1159_td
jdbc:h2:~/test
@~features_1159_th
トピック
@~features_1160_td
jdbc:h2:file:/data/sample
@~features_1161_td
エンベッド (ローカル) 接続
@~features_1208_h3
エンベッド (ローカル) データベースに接続
@~features_1209_p
ローカルデータベースに接続するためのデータベースURLは、<code>jdbc:h2:[file:][&lt;path&gt;]&lt;databaseName&gt;</code> です。接頭辞 <code>file:</code> はオプションです。相対パスが使われていない、または相対パスのみ使われている場合、現在作業しているディレクトリは、スターティングポイントとして使われます。パスとデータベース名の大文字と小文字の区別はOSに依存されますが、小文字のみの使用が推奨されています。データベース名は少なくとも3文字でなくてはなりません (File.createTempFile の制限)。ユーザーホームディレクトリを示すために、~/ を次のように使用します: jdbc:h2:~/test
@~features_1210_h3
メモリオンリーデータベース
@~features_1211_p
特定の使用方法では (例: rapid prototyping、テスト、高パフォーマンスオペレーション、読み取り専用データベース)、データは持続する (変化する) 必要は全くないかもしれません。このデータベースは、データが持続しない際にメモリオンリーモードをサポートします。
@~features_1212_h3
エンベッド (ローカル) データベースに接続
@~features_1212_p
一部ケースでは、メモリオンリーデータベースへの接続はひとつの接続のみ必要とされます。これは、開かれるデータベースがプライベートだということを意味しています。このケースでは、データベースURLは <CODE>jdbc:h2:mem:</CODE> です。同じ仮想マシン内で二つの接続が開いているというのは、二つの異なった (プライベートの) データベースが開いているという意味です。
@~features_1213_p
ローカルデータベースに接続するためのデータベースURLは、<code>jdbc:h2:[file:][&lt;path&gt;]&lt;databaseName&gt;</code> です。接頭辞 <code>file:</code> はオプションです。相対パスが使われていない、または相対パスのみ使われている場合、現在作業しているディレクトリは、スターティングポイントとして使われます。パスとデータベース名の大文字と小文字の区別はOSに依存されますが、小文字のみの使用が推奨されています。データベース名は少なくとも3文字でなくてはなりません (File.createTempFile の制限)。ユーザーホームディレクトリを示すために、~/ を次のように使用します: jdbc:h2:~/test
@~features_1214_h2
メモリオンリーデータベース
@~features_1214_p
TCP/IPまたは、SSL/TLSを使用して、メモリオンリーデータベースに間接的に (または、同じマシンの複数のプロセスから) 接続することも可能です。データベースURLの例: <code>jdbc:h2:tcp://localhost/mem:db1</code> (プライベートデータベースを間接的に使用することも可能です)
@~features_1215_h2
暗号化ファイルと共にデータベースへ接続する
@~features_1215_p
特定の使用方法では (例: rapid prototyping、テスト、高パフォーマンスオペレーション、読み取り専用データベース)、データは持続する (変化する) 必要は全くないかもしれません。このデータベースは、データが持続しない際にメモリオンリーモードをサポートします。
@~features_1217_h2
データベースファイルロック
@~features_1220_h2
暗号化ファイルと共にデータベースへ接続する
@~features_1220_li
デフォルトメソッドは "file" で、データベースファイルを保護するために、watchdogスレッドを使用します。watchdogは、ロックファイルをそれぞれ秒単位で読み込みます。
@~features_1221_li
二つめのメソッドは "socket" で、サーバーソケットを開きます。ソケットメソッドは、ロックファイルを秒単位で読むことを必要としていません。ソケットメソッドは、データベースファイルがひとつの (いつも同じ) コンピューターのみによってアクセスされる場合にのみ使用されます。
@~features_1221_p
ファイルを暗号化して使用するためには、暗号化アルゴリズム ("cipher") とファイルパスワードを指定することが必要です。アルゴリズムは、接続パラメータを使用することで指定される必要があります。二つのアルゴリズムがサポートされています: XTEAとAES です。ファイルパスワードは、ユーザーパスワードの前のパスワードフィールドで指定されます。ファイルパスワードとユーザーパスワードの間に、シングルスペースを加えることが必要です; ファイルパスワードそのものにはスペースは含まれません。ファイルパスワードは (ユーザーパスワードも同様) 大文字と小文字を区別しています。こちらがパスワードの暗号化されたデータベースに接続するための例です:
@~features_1222_h2
データベースファイルロック
@~features_1222_li
ファイルロッキングなしでデータベースを開始することも可能です; このケースでは、データベースファイルを保護するのはアプリケーション次第です。
@~features_1223_p
データベースが開かれるときはいつも、データベースが使用中であると他のプロセスに合図するためにロックファイルが作成されます。もしデータベースが閉じられるか、データベースを開いたプロセスが終了するなら、ロックファイルは削除されます。
@~features_1225_li
デフォルトメソッドは "file" で、データベースファイルを保護するために、watchdogスレッドを使用します。watchdogは、ロックファイルをそれぞれ秒単位で読み込みます。
@~features_1225_p
アルゴリズムについての詳しい情報は、進化したトピックス のファイルロックプロトコルをご覧下さい。
@~features_1226_h2
すでに存在する場合のみ、データベースを開く
@~features_1227_p
デフォルトでは、アプリケーションが <code>DriverManager.getConnection(url,...)</code> を呼び出し、URLで指定されたデータベースがまだ存在しない時、 新しい (空の) データベースが作成されます。ある状況では、もしすでにデータベースが存在するのであれば、新しいデータベースの作成を制限して、データベースを開くだけにした方がよいでしょう。<code>;ifexists=true</code> をURLに追加することによって可能になります。このケースでは、もしデータベースがまだ存在していなければ、接続しようとした時に例外が投げられます。接続は、データベースがすでに存在する時のみ成功します。完全なURLは次のようです:
@~features_1228_h2
データベースを終了する
@~features_1228_p
異なったファイルロックメソッドでデータベースを開くには、"FILE_LOCK" パラメータを使用します。以下のコードは "socket" ロックメソッドのデータベースを開きます:
@~features_1229_h3
データベースの遅延終了
@~features_1231_h2
すでに存在する場合のみ、データベースを開く
@~features_1231_p
値の-1は、データベースは決して自動的に閉じられないということを意味します。値の0はデフォルトで、最後の接続が終了した時データベースが終了するということを意味します。この設定は永続的で、管理者のみが設定することができます。データベースのURL内で値を設定することが可能です: <code>jdbc:h2:~/test;DB_CLOSE_DELAY=10</code>
@~features_1232_h3
VMが終了した時、データベースを終了しない
@~features_1232_p
デフォルトでは、アプリケーションが <code>DriverManager.getConnection(url,...)</code> を呼び出し、URLで指定されたデータベースがまだ存在しない時、 新しい (空の) データベースが作成されます。ある状況では、もしすでにデータベースが存在するのであれば、新しいデータベースの作成を制限して、データベースを開くだけにした方がよいでしょう。<code>;ifexists=true</code> をURLに追加することによって可能になります。このケースでは、もしデータベースがまだ存在していなければ、接続しようとした時に例外が投げられます。接続は、データベースがすでに存在する時のみ成功します。完全なURLは次のようです:
@~features_1233_h2
データベースを終了する
@~features_1233_p
デフォルトでは、データベースは最後の接続が閉じられた時に終了されます。しかし、最後の接続が決して閉じられなければ、仮想マシンが正常に終了する時にデータベースは閉じられます。これはshutdown hookを使うことによって行われます。一部状況では、データベースはこのケースで終了されてはいけません。例えば、仮想マシンが終了している時にデータベースがまだ使われている場合です (例として、シャットダウンプロセスをデータベースに保存するため)。このケースでは、データベースURLでデータベースの自動終了を無効にすることが可能です。最初の接続は (ひとつはデータベースを開始するもの) データベースURLにオプションを設定する必要があります (設定を後で変更することは不可能です)。VMが終了する時、データベースの終了を無効にするためのデータベースURLです:
@~features_1234_h2
ログインデックスの修正
@~features_1234_h3
データベースの遅延終了
@~features_1235_p
通常、データベースへの最後の接続が閉じられた時、データベースが終了されます。一部状況では、例えば、可能ではない時に接続をつなげたままにしておくことは、アプリケーションを減速させます。SQLステートメントの SET DB_CLOSE_DELAY &lt;seconds&gt; でデータベースの自動終了を遅らせるか、または無効にすることができます。secondsには、最後の接続が閉じられた後データベースを接続したままの状態に保つため、秒数を指定します。例えば、次のステートメントはデータベースを10秒間開かれた状態に保ちます:
@~features_1236_h3
未知の設定を無視
@~features_1237_h3
VMが終了した時、データベースを終了しない
@~features_1237_p
データベースに接続する時、いくつかのアプリケーションが (例えば、OpenOffice.org Base) いくつかの追加パラメータを渡します。なぜそれらのパラメータが渡されるのかは知られていません。PREFERDOSLIKELINEENDS と IGNOREDRIVERPRIVILEGES はパラメータの例で、それらは、OpenOffice.orgとの互換性を改良するために単に無視されます。もしデータベースに接続する時、アプリケーションが他のパラメータを渡していたら、通常データベースは、 パラメータはサポートされていません、という例外を投げます。データベースURLに ;IGNORE_UNKNOWN_SETTINGS=TRUE を追加することで、このようなパラメータを無視することが可能です。
@~features_1238_h3
接続が開始された時に他の設定を変更する
@~features_1238_p
デフォルトでは、データベースは最後の接続が閉じられた時に終了されます。しかし、最後の接続が決して閉じられなければ、仮想マシンが正常に終了する時にデータベースは閉じられます。これはshutdown hookを使うことによって行われます。一部状況では、データベースはこのケースで終了されてはいけません。例えば、仮想マシンが終了している時にデータベースがまだ使われている場合です (例として、シャットダウンプロセスをデータベースに保存するため)。このケースでは、データベースURLでデータベースの自動終了を無効にすることが可能です。最初の接続は (ひとつはデータベースを開始するもの) データベースURLにオプションを設定する必要があります (設定を後で変更することは不可能です)。VMが終了する時、データベースの終了を無効にするためのデータベースURLです:
@~features_1239_h2
ログインデックスの修正
@~features_1239_p
すでに記述された設定に加えて (暗号、ファイルロック、データベースの存在、ユーザー、パスワード)、他のデータベースの設定は、データベースURLの中で渡すことができます。<CODE>SET setting value</CODE>ステートメントを接続直後に実行するのと同じように 、<CODE>setting=value</CODE> をURLの最後に追加します。このデータベースによってサポートされている設定の一覧は、SQL文法のドキュメントをご覧下さい。
@~features_1240_h2
カスタムファイル アクセスモード
@~features_1240_p
通常、インデックスファイルの変更はパフォーマンスのために記録されません。データベースを開いた時に、インデックスファイルが破損しているか、無くなっていたら、データから作り直されます。停電、またはプログラムの異常終了のため、データベースが正しく終了されなかった時、インデックスファイルは破損されます。一部状況では、例えば、非常に大きなデータベースを使用している時 (数百MB以上)、インデックスファイルが再作成されるのにはとても時間がかかります。それらの状況では、インデックスファイルの変更を記録しておいた方がよいでしょう。そうすることによって、破損されたインデックスファイルの回復が速くなります。ログインデックスの修正を可能にするためには、jdbc:h2:~/test;LOG=2 のように、URLに LOG=2 を追加して下さい。接続する時に、この設定が指定されます。このオプションを使用する時、データベースのアップデートパフォーマンスは低下するでしょう。
@~features_1241_h3
未知の設定を無視
@~features_1241_p
通常、データベースはログ、データとインデックスファイルを、アクセスモード "rw" で開きます。read-write (モード "r" が使われている読み取り専用データベースは除く) という意味です。"rws" と "rwd" もサポートしています。ログファイルに使用されるアクセスモードは、ACCESS_MODE_LOG を通して設定されます; データとインデックスファイルには、ACCESS_MODE_DATA を使用してください。これらの設定は、データベースURLで指定されなくてはいけません:
@~features_1242_p
データベースに接続する時、いくつかのアプリケーションが (例えば、OpenOffice.org Base) いくつかの追加パラメータを渡します。なぜそれらのパラメータが渡されるのかは知られていません。PREFERDOSLIKELINEENDS と IGNOREDRIVERPRIVILEGES はパラメータの例で、それらは、OpenOffice.orgとの互換性を改良するために単に無視されます。もしデータベースに接続する時、アプリケーションが他のパラメータを渡していたら、通常データベースは、 パラメータはサポートされていません、という例外を投げます。データベースURLに ;IGNORE_UNKNOWN_SETTINGS=TRUE を追加することで、このようなパラメータを無視することが可能です。
@~features_1243_h2
複数の接続
@~features_1243_h3
接続が開始された時に他の設定を変更する
@~features_1244_h3
同時に複数のデータベースを開く
@~features_1244_p
すでに記述された設定に加えて (暗号、ファイルロック、データベースの存在、ユーザー、パスワード)、他のデータベースの設定は、データベースURLの中で渡すことができます。<CODE>SET setting value</CODE>ステートメントを接続直後に実行するのと同じように 、<CODE>setting=value</CODE> をURLの最後に追加します。このデータベースによってサポートされている設定の一覧は、SQL文法のドキュメントをご覧下さい。
@~features_1245_h2
カスタムファイル アクセスモード
@~features_1245_p
アプリケーションは、同じデータベースへの複数の接続を含め、複数のデータベースを同時に開くことができます。開くデータベースの数は、利用可能なメモリによってのみ制限されています。
@~features_1246_h3
>同じデータベースへの複数の接続: クライアント/サーバー
@~features_1246_p
通常、データベースはログ、データとインデックスファイルを、アクセスモード "rw" で開きます。read-write (モード "r" が使われている読み取り専用データベースは除く) という意味です。"rws" と "rwd" もサポートしています。ログファイルに使用されるアクセスモードは、ACCESS_MODE_LOG を通して設定されます; データとインデックスファイルには、ACCESS_MODE_DATA を使用してください。これらの設定は、データベースURLで指定されなくてはいけません:
@~features_1248_h2
複数の接続
@~features_1248_h3
マルチスレッドサポート
@~features_1249_h3
同時に複数のデータベースを開く
@~features_1249_p
このデータベースは安全なマルチスレッドです。これは、アプリケーションがマルチスレッドならば、データベースへの同時アクセスに関して心配する必要がない、ということを意味しています。本質的に、同じデータベースへのほとんどのリクエストは同時に動きます。アプリケーションは、同時に同じデータベースにアクセスするマルチスレッドを使用することができますが、ひとつのスレッドが処理時間の長いクエリーを実行しているなら、他のスレッドは待つ必要があります。
@~features_1250_h3
ロック、ロックタイムアウト、デッドロック
@~features_1250_p
アプリケーションは、同じデータベースへの複数の接続を含め、複数のデータベースを同時に開くことができます。開くデータベースの数は、利用可能なメモリによってのみ制限されています。
@~features_1251_h3
>同じデータベースへの複数の接続: クライアント/サーバー
@~features_1251_p
データの一貫した状態をそれぞれの接続に与えるために、データベースはテーブルレベルでのロックを使用します。二種類のロックがあります: リードロック (共有ロック) とライトロック (排他ロック) です。もし、接続がテーブルから読み込みたい場合で、テーブルにライトロックがない場合に、リードロックをテーブルに追加します。もしライトロックがあれば、この接続はロックを解除するために他の接続を待ちます。接続が指定された時間までにロックを取得できなければ、ロックタイムアウトの例外が投げられます。
@~features_1252_p
異なったプロセス、またはコンピューターから同時に同じデータベースにアクセスしたい場合、クライアント/サーバー モードを使用することが必要です。このケースでは、ひとつのプロセスがサーバーとして動作し、他のプロセスは (同様に他のコンピューターに属することができます) TCP/IP (または改善されたセキュリティ用のTCP/IPの上のSSL/TLS) を通してサーバーに接続します。
@~features_1253_h3
マルチスレッドサポート
@~features_1253_th
ロックの種類
@~features_1254_p
このデータベースは安全なマルチスレッドです。これは、アプリケーションがマルチスレッドならば、データベースへの同時アクセスに関して心配する必要がない、ということを意味しています。本質的に、同じデータベースへのほとんどのリクエストは同時に動きます。アプリケーションは、同時に同じデータベースにアクセスするマルチスレッドを使用することができますが、ひとつのスレッドが処理時間の長いクエリーを実行しているなら、他のスレッドは待つ必要があります。
@~features_1254_th
SQLステートメント
@~features_1255_h3
ロック、ロックタイムアウト、デッドロック
@~features_1255_td
Read
@~features_1256_p
データの一貫した状態をそれぞれの接続に与えるために、データベースはテーブルレベルでのロックを使用します。二種類のロックがあります: リードロック (共有ロック) とライトロック (排他ロック) です。もし、接続がテーブルから読み込みたい場合で、テーブルにライトロックがない場合に、リードロックをテーブルに追加します。もしライトロックがあれば、この接続はロックを解除するために他の接続を待ちます。接続が指定された時間までにロックを取得できなければ、ロックタイムアウトの例外が投げられます。
@~features_1256_td
SELECT * FROM TEST
@~features_1257_td
CALL SELECT MAX(ID) FROM TEST
@~features_1258_td
SCRIPT
@~features_1258_th
ロックの種類
@~features_1259_td
Write
@~features_1260_td
Read
@~features_1270_p
SQLコマンド SET LOCK_TIMEOUT &lt;milliseconds&gt; を使用して、ロックタイムアウトの例外が投げられるまでの秒数を、それぞれの接続ごとに別々に設定することができます。SQLコマンド SET DEFAULT_LOCK_TIMEOUT &lt;milliseconds&gt; を使用して、初期のロックタイムアウト (新しい接続に使用されるタイムアウト) を設定することができます。デフォルトのロックタイムアウトは永続的です。
@~features_1271_h2
データベースファイルレイアウト
@~features_1272_p
永続的なデータベースのために作成された多くのファイルがあります。一部のデータベースを除いて、全てのテーブルと (または) インデックスが自身のファイル内に保存されているわけではありません。その代りに、通常次のファイルのみが作成されます: データファイル、インデックスファイル、ログファイル、データベースロックファイル (データベースが使われている間のみ存在します)。それに加えて、ファイルはそれぞれの大きなオブジェクト (CLOB/BLOB) のために作成されます。各ライナーインデックスのためのファイル、大きなresult setのためのテンポラリーファイルです。データベーストレースオプションが有効の場合、トレースファイルが作成されます。次のファイルはデータベースによって作成されます:
@~features_1273_th
ファイル名
@~features_1274_th
説明
@~features_1275_p
SQLコマンド SET LOCK_TIMEOUT &lt;milliseconds&gt; を使用して、ロックタイムアウトの例外が投げられるまでの秒数を、それぞれの接続ごとに別々に設定することができます。SQLコマンド SET DEFAULT_LOCK_TIMEOUT &lt;milliseconds&gt; を使用して、初期のロックタイムアウト (新しい接続に使用されるタイムアウト) を設定することができます。デフォルトのロックタイムアウトは永続的です。
@~features_1275_th
ファイル数
@~features_1276_h2
データベースファイルレイアウト
@~features_1276_td
test.data.db
@~features_1277_p
永続的なデータベースのために作成された多くのファイルがあります。一部のデータベースを除いて、全てのテーブルと (または) インデックスが自身のファイル内に保存されているわけではありません。その代りに、通常次のファイルのみが作成されます: データファイル、インデックスファイル、ログファイル、データベースロックファイル (データベースが使われている間のみ存在します)。それに加えて、ファイルはそれぞれの大きなオブジェクト (CLOB/BLOB) のために作成されます。各ライナーインデックスのためのファイル、大きなresult setのためのテンポラリーファイルです。データベーストレースオプションが有効の場合、トレースファイルが作成されます。次のファイルはデータベースによって作成されます:
@~features_1277_td
データファイル
@~features_1278_td
全てのテーブルのデータを含む
@~features_1278_th
ファイル名
@~features_1279_td
フォーマット: &lt;database&gt;.data.db
@~features_1280_td
データベースごとに1ファイル
@~features_1281_td
test.data.db
@~features_1317_h3
データベースファイルの移動と改名
@~features_1318_p
データベースの名前と位置は、データベース名の中には保存されません。
@~features_1319_p
データベースが閉じられている間、ファイルは他のディレクトリに移動することができ、同様にファイル名を変えることもできます (全てのファイルが同じ名前で始まる必要があります)。
@~features_1320_p
ファイルにはプラットホーム固有のデータがないので、問題なく他のオペレーティングシステムに移動することができます。
@~features_1321_h3
バックアップ
@~features_1322_h3
データベースファイルの移動と改名
@~features_1322_p
データベースが閉じられている時、データベースファイルのバックアップをとることが可能です。インデックスファイルはバックアップをとる必要はありません。なぜなら、インデックスファイルは冗長なデータを含み、もしファイルが存在しなければ自動的に再作成されるからです。
@~features_1323_p
データベースの名前と位置は、データベース名の中には保存されません。
@~features_1324_h2
ログとリカバリー
@~features_1326_h3
バックアップ
@~features_1326_p
インデックスファイルのアップデートはデフォルトでは記録されないことに注意して下さい。もしデータベースが開かれて、リカバリーが必要だとされたら、インデックスファイルは最初から作り替えられます。
@~features_1327_p
データベースが閉じられている時、データベースファイルのバックアップをとることが可能です。インデックスファイルはバックアップをとる必要はありません。なぜなら、インデックスファイルは冗長なデータを含み、もしファイルが存在しなければ自動的に再作成されるからです。
@~features_1329_h2
ログとリカバリー
@~features_1330_p
データベースでデータが修正され、それらの変更がコミットされた時はいつでも、変更はディスクに記録されます (インメモリオブジェクトを除いて)。データファイル自体への変更は通常、ディスクアクセスを最適化するために後で書かれています。もし電源異常があった場合、データファイルとインデックスファイルはアップデートされません。しかし、変更がログファイルに書かれていれば、次回データベースを開いた時に、ログファイルに書かれた変更は自動的に再び適用されます。
@~features_1331_th
モード
@~features_1332_th
相違
@~features_1333_td
PostgreSQL
@~features_1334_h2
互換性
@~features_1334_td
別の値にNULLをもたらすNULL連結。通常、オペレータのうちひとつがNULLであるなら空のストリングとしてNULLを扱い、両方の値がNULLである場合にだけNULLを返します。
@~features_1335_p
#All database engines behave a little bit different. Where possible, H2 supports the ANSI SQL standard, and tries to be compatible to other databases. There are still a few differences however:
@~features_1335_td
MySQL
@~features_1336_td
データを挿入する時、もしカラムにNOT NULLが定義されていて、NULLが挿入されたら、0 (または空のストリング、またはtimestampカラムのための現在のtimestamp) の値が使用されます。通常、このオペレーションは許可されていないので、例外が投げられます。
@~features_1337_h3
互換モード
@~features_1337_td
HSQLDB
@~features_1338_p
#For certain features, this database can emulate the behavior of specific databases. Not all features or differences of those databases are implemented. Currently, this feature is mainly used for randomized comparative testing (where random statements are executed against multiple databases and the results are compared). The mode can be changed by specifying the mode in the database URL, or using the SQL statement SET MODE. To use the HSQLDB mode, you can use the database URL <code>jdbc:h2:~/test;MODE=HSQLDB</code> or the SQL statement <code>SET MODE HSQLDB</code> . Here is the list of currently supported modes and the difference to the regular mode:
@~features_1338_td
デシマルデータを変換する時、新しいスケールが現在のスケールより小さい時のみ、数字は変換されます。通常、スケールは変換されて、必要であれば 0 が追加されます。
@~features_1339_h2
トレースオプションを使用する
@~features_1339_th
モード
@~features_1340_p
アプリケーション内の問題を見つけるために、時々、何のデータベースオペレーションがどこで実行されているかを知るのは良い方法です。このデータベースは次のトレースの特徴を提供します:
@~features_1341_li
System.out と (または) ファイルをトレースする
@~features_1341_td
PostgreSQL
@~features_1342_li
トレースレベル OFF、ERROR、INFO と DEBUG をサポート
@~features_1343_li
トレースファイルの最大サイズの設定が可能
@~features_1344_li
Javaコード生成が可能
@~features_1345_li
手動でファイルを作成することによって、ランタイムでトレースが可能
@~features_1346_h3
トレースオプション
@~features_1347_h2
トレースオプションを使用する
@~features_1347_p
トレースオプションを可能にする簡単な方法は、データベースURLにトレースオプションを設定することです。二つの設定があり、ひとつは、System.out (TRACE_LEVEL_SYSTEM_OUT) トレーシングで、もうひとつはファイルトレーシング(TRACE_LEVEL_FILE)です。トレースレベルは、0 が OFF、1 が ERROR (デフォルト)、2 が INFO で 3 が DEBUGです。両方のレベルがDEBUGに設定されたデータベースURLです:
@~features_1348_p
アプリケーション内の問題を見つけるために、時々、何のデータベースオペレーションがどこで実行されているかを知るのは良い方法です。このデータベースは次のトレースの特徴を提供します:
@~features_1349_h3
トレースファイルの最大サイズを設定
@~features_1349_li
System.out と (または) ファイルをトレースする
@~features_1350_p
高いトレースレベルを使用する時、トレースファイルは早くサイズが非常に大きくなります。SQLステートメント <CODE>SET TRACE_MAX_FILE_SIZE maximumFileSizeInMB</CODE> を実行することによりファイルのサイズを制限することができます。ログファイルが制限を超えたら、ファイルは ".old" にファイル名を変えて、新しいファイルが作成されます。もしもうひとつの .oldファイルが存在する場合は、それは削除されます。デフォルトの設定は16 MBです。例:
@~features_1351_h3
Javaコード生成
@~features_1352_p
トレースレベルをINFOかDEBUGに設定した時、同様にJavaのソースコードが生成されるので、問題はより簡単に再生されます。トレースファイルはこのようなものです:
@~features_1353_p
Javaのソースコードを得るために、 /**/ のない行を取り除く必要があります。 Windowsでの簡単な方法は:
@~features_1354_h3
トレースオプション
@~features_1354_p
その後、コンパイルされる前にTrace.javaファイルを完全にする必要があります。例:
@~features_1355_p
トレースオプションを可能にする簡単な方法は、データベースURLにトレースオプションを設定することです。二つの設定があり、ひとつは、System.out (TRACE_LEVEL_SYSTEM_OUT) トレーシングで、もうひとつはファイルトレーシング(TRACE_LEVEL_FILE)です。トレースレベルは、0 が OFF、1 が ERROR (デフォルト)、2 が INFO で 3 が DEBUGです。両方のレベルがDEBUGに設定されたデータベースURLです:
@~features_1356_h3
手動でファイルを作成し、ランタイムでトレースオプションを可能にする
@~features_1357_h3
トレースファイルの最大サイズを設定
@~features_1357_p
時々、アプリケーション、またはデータベースのURLを変えられない、変えたくない場合があります。このような場合に、ランタイムであっても (データベースの接続が開かれている間) トレースモードを可能にできる方法がまだあります。必要なことは、データベースファイルが保存されているディレクトリに特別なファイルを作るだけです。データベースエンジンは、このファイルが存在する場合に (ステートメントが実行されている間のみ) 4秒ごとにチェックしています。このファイル名は、データベース名 プラス ".trace.db.start" です。この特徴はデータベースが暗号化されている場合は無効になります。
@~features_1358_p
高いトレースレベルを使用する時、トレースファイルは早くサイズが非常に大きくなります。SQLステートメント <CODE>SET TRACE_MAX_FILE_SIZE maximumFileSizeInMB</CODE> を実行することによりファイルのサイズを制限することができます。ログファイルが制限を超えたら、ファイルは ".old" にファイル名を変えて、新しいファイルが作成されます。もしもうひとつの .oldファイルが存在する場合は、それは削除されます。デフォルトの設定は16 MBです。例:
@~features_1359_h2
読み取り専用データベース
@~features_1359_h3
Javaコード生成
@~features_1360_p
トレースレベルをINFOかDEBUGに設定した時、同様にJavaのソースコードが生成されるので、問題はより簡単に再生されます。トレースファイルはこのようなものです:
@~features_1361_h2
バイナリーとテキストストレージフォーマット
@~features_1363_h2
ディスクスペースが少ない状況での正しい取り扱い
@~features_1364_h3
手動でファイルを作成し、ランタイムでトレースオプションを可能にする
@~features_1364_p
データベースは、利用可能なディスクスペースが少なくなっている状況に対処することができます。データベースを開始する時はいつも、"emergency space" ファイルが作られ (サイズは 1 MB)、利用可能なスペースがもうない場合には、ファイルは小さくなります。利用可能なスペースが 128 KB以下になった場合、データベースは特別な読み取り専用モードになり、全ての書き込み操作はもはや許可されません: この時点から全ての書き込み操作は、"No disk space available" を例外に投げます。通常のオペレーションモードに戻るためには、最初にデータベースへの全ての接続を終了し、スペースを空ける必要があります。
@~features_1365_p
時々、アプリケーション、またはデータベースのURLを変えられない、変えたくない場合があります。このような場合に、ランタイムであっても (データベースの接続が開かれている間) トレースモードを可能にできる方法がまだあります。必要なことは、データベースファイルが保存されているディレクトリに特別なファイルを作るだけです。データベースエンジンは、このファイルが存在する場合に (ステートメントが実行されている間のみ) 4秒ごとにチェックしています。このファイル名は、データベース名 プラス ".trace.db.start" です。この特徴はデータベースが暗号化されている場合は無効になります。
@~features_1366_h3
破損したデータベースを開く
@~features_1367_h2
読み取り専用データベース
@~features_1367_p
boot info (始動時に実行されるSQLスクリプト) が破損しているため、データベースを開くことができない場合、データベースイベントリスナーを指定することでデータベースを開くことができます。例外は記録されますが、データベースの開始は続行します。
@~features_1368_h2
computed column / ベースインデックスの機能
@~features_1368_p
データベースファイルが読み取り専用なら、同様にデータベースも読み取り専用です。このデータベースで新しいテーブルを作成したり、データを追加したり変更したりすることはできません。SELECTステートメントのみ許可されています。読み取り専用データベースを作成するには、データベースを終了してログファイルを小さくします。ログファイルを削除してはいけません。そして、オペレーティングシステムを使用してデータベースファイルを読み取り専用にします。これでデータベースを開くと、読み取り専用になっています。アプリケーションが、データベースが読み取り専用であることを判断する方法は二つあります: Connection.isReadOnly() を呼ぶか、SQLステートメント CALL READONLY() を実行します。
@~features_1369_h2
#Read Only Databases in Zip or Jar File
@~features_1369_p
インデックスの機能は、このデータベースによって直接サポートはされていませんが、computed columnsを使用することによって、簡単にエミュレートすることができます。例えば、カラムのupper-caseバージョンのインデックスが必要なら、原形のカラムのupper-caseバージョンのcomputed columnを作成し、このカラムにインデックスをつけます:
@~features_1370_p
#To create a read-only database in a zip, first create a regular persistent database, and then create a backup. If you are using a database named 'test', an easy way to do that is using the BACKUP SQL statement: #値は生成されているので、データを挿入する時、カラムのupper-caseバージョンのための値を指定する必要はありません (許可されていません)。 しかし、テーブルを呼ぶ時、このカラムを使用することはできます。:
@~features_1371_h2
多次元インデックス
@~features_1373_h2
バイナリーとテキストストレージフォーマット
@~features_1373_p
現在、Z-order (N-order または Morton-order とも呼ばれています) が使用されています; Hilbert curveも使用できますが、実装はより複雑です。多次元の値を変換するアルゴリズムは、bit-interleavingと呼ばれています。B-Treeインデックス (通常は computed columnを使用します)を使用することで、スカラーの値はインデックスをつけられます。
@~features_1374_p
このデータベースエンジンは、バイナリーとテキストストレージフォーマットの両方をサポートしています。バイナリーはより高速ですが、テキストストレージフォーマットは同様に役立つ場合があります。例えば、データベースエンジンをデバッグする場合です。データベースがすでに存在するなら、ストレージフォーマットは自動的に推奨されます。新しいデータベースはデフォルトでバイナリーストレージフォーマットで作られます。テキストストレージフォーマットで新しいデータベースを作成するには、データベースURLに、パラメータ STORAGE=TEXT が含まれていなければなりません。例: jdbc:h2:~/test;STORAGE=TEXT
@~features_1375_h2
ディスクスペースが少ない状況での正しい取り扱い
@~features_1376_h3
安全なパスワードを使用する
@~features_1376_p
データベースは、利用可能なディスクスペースが少なくなっている状況に対処することができます。データベースを開始する時はいつも、"emergency space" ファイルが作られ (サイズは 1 MB)、利用可能なスペースがもうない場合には、ファイルは小さくなります。利用可能なスペースが 128 KB以下になった場合、データベースは特別な読み取り専用モードになり、全ての書き込み操作はもはや許可されません: この時点から全ての書き込み操作は、"No disk space available" を例外に投げます。通常のオペレーションモードに戻るためには、最初にデータベースへの全ての接続を終了し、スペースを空ける必要があります。
@~features_1378_h3
破損したデータベースを開く
@~features_1378_p
i'sE2rtPiUKtT (もしトリックを知っていれば、このパスワードは覚えやすいものです)
@~features_1379_h3
パスワード: Stringの代わりにChar Arraysを使用する
@~features_1379_p
boot info (始動時に実行されるSQLスクリプト) が破損しているため、データベースを開くことができない場合、データベースイベントリスナーを指定することでデータベースを開くことができます。例外は記録されますが、データベースの開始は続行します。
@~features_1380_h2
computed column / ベースインデックスの機能
@~features_1380_p
Java Stringは不変のオブジェクトであり、アプリケーションによって安全に壊されることはできません。Stringの作成後、Stringは少なくともガベージコレクションになるまで、コンピューターのメインメモリ内にとどまるでしょう。ガベージコレクションはアプリケーションによって制御されず、ガベージコレクションであっても、データはまだメモリにとどまっているでしょう。パスワードが含まれるメモリの一部をディスクと取り換えることも可能でしょう (十分でないメインメモリも使用可能のため)。
@~features_1381_p
インデックスの機能は、このデータベースによって直接サポートはされていませんが、computed columnsを使用することによって、簡単にエミュレートすることができます。例えば、カラムのupper-caseバージョンのインデックスが必要なら、原形のカラムのupper-caseバージョンのcomputed columnを作成し、このカラムにインデックスをつけます:
@~features_1383_h2
多次元インデックス
@~features_1383_p
このサンプルでは、パスワードはアプリケーションでのハードコードで、もちろん安全ではありません。しかし、Java Swingはchar arrayを使用してパスワードを得る方法をサポートしています (JPasswordField)。
@~features_1384_h3
ユーザー名 と (または) パスワードをURLで認証する
@~features_1384_p
効率的な多次元の (空間的) 領域のクエリーを実行するためにツールを提供します。このデータベースは専門的な空間的インデックス (R-Tree またはより小さいもの) をサポートしていません。代わりに、B-Treeインデックスが使われています。それぞれのレコードに対して、多次元のキーは、単数範囲 (スカラー) の値に変換 (位置づけ) されます。この値は、space-filling curve (空間充填曲線) で位置を指定します。
@~features_1386_h2
ユーザー定義の関数とストアドプロシージャ
@~features_1387_h2
パスワードを使用する
@~features_1387_p
組み込み関数に加えて、このデータベースはユーザー定義のJava関数をサポートしています。同様に、このデータベースではJava関数はストアドプロシージャとして使用されています。関数は、使用される前に宣言 (登録) されていなければなりません。static Javaメソッドのみサポートされています; クラスとメソッドの両方が public である必要があります。Javaメソッドの例:
@~features_1388_h3
安全なパスワードを使用する
@~features_1388_p
Java関数は、CREATE ALIAS と呼ばれるデータベースに登録されていなければなりません:
@~features_1389_p
弱いパスワードは、暗号化やセキュリティプロトコルに取るに足らず、解読されてしまうことを覚えておいて下さい。辞書で見つけられるようなパスワードは使用しないでください。また、数字を付け足してもそのようなパスワードは安全にはなりません。良いパスワードを作る方法は、覚えやすい、文章の最初の文字を使う、大文字と小文字を使う、特別な文字が含まれているものを作る、です。例:
@~features_1390_h3
データタイプマッピング関数
@~features_1391_h3
パスワード: Stringの代わりにChar Arraysを使用する
@~features_1391_p
"int" のような non-nullable (NULL可能ではない) パラメータを受け入れる関数は、パラメータのうちひとつがNULLであるなら呼ばれないでしょう。このケースでは、NULLの値は結果として使用されます。このケースで関数を呼び出したいのなら、"int" の代わりに "java.lang.Integer" を使用する必要があります。
@~features_1392_h3
接続を必要とする関数
@~features_1392_p
Java Stringは不変のオブジェクトであり、アプリケーションによって安全に壊されることはできません。Stringの作成後、Stringは少なくともガベージコレクションになるまで、コンピューターのメインメモリ内にとどまるでしょう。ガベージコレクションはアプリケーションによって制御されず、ガベージコレクションであっても、データはまだメモリにとどまっているでしょう。パスワードが含まれるメモリの一部をディスクと取り換えることも可能でしょう (十分でないメインメモリも使用可能のため)。
@~features_1394_h3
例外を投げる関数
@~features_1396_h3
ユーザー名 と (または) パスワードをURLで認証する
@~features_1397_p
ユーザー名を <code>Connection conn = DriverManager. getConnection("jdbc:h2:~/test", "sa", "123");</code> のように切り離されたパラメータとして認証する代わりに、URLそのもので <code>Connection conn = DriverManager. getConnection("jdbc:h2:~/test;USER=sa;PASSWORD=123");</code> ユーザー名 (と (または) パスワード)を提供することができます。URL内の設定は、切り離されたパラメータとして認証させる設定より優先されます。
@~features_1398_h2
ユーザー定義の関数とストアドプロシージャ
@~features_1398_h3
SimpleResultSetを使用する
@~features_1399_p
組み込み関数に加えて、このデータベースはユーザー定義のJava関数をサポートしています。同様に、このデータベースではJava関数はストアドプロシージャとして使用されています。関数は、使用される前に宣言 (登録) されていなければなりません。static Javaメソッドのみサポートされています; クラスとメソッドの両方が public である必要があります。Javaメソッドの例:
@~features_1400_h3
関数をテーブルとして使用する
@~features_1402_h2
トリガー
@~features_1402_h3
データタイプマッピング関数
@~features_1403_p
"int" のような non-nullable (NULL可能ではない) パラメータを受け入れる関数は、パラメータのうちひとつがNULLであるなら呼ばれないでしょう。このケースでは、NULLの値は結果として使用されます。このケースで関数を呼び出したいのなら、"int" の代わりに "java.lang.Integer" を使用する必要があります。
@~features_1404_h3
接続を必要とする関数
@~features_1404_p
他のテーブルのクエリーかデータのアップデートに接続を使用することができます。トリガーはその時データベースで定義されている必要があります:
@~features_1405_p
もしJava関数の最初のパラメータが java.sql.Connection なら、データベースへの接続は与えられています。返す前にこの接続を閉じる必要はありません。
@~features_1406_h2
データベースをコンパクトにする
@~features_1406_h3
例外を投げる関数
@~features_1407_p
関数が例外を投げたら、現在のステートメントはロールバックされ、例外はアプリケーションに投げられます。
@~features_1408_h3
Result Setを返す関数
@~features_1408_p
サンプルアプリケーション org.h2.samples.Compact もご覧下さい。データベースのバックアップを作るのと、スクリプトからデータベースを再構築するのにSCRIPT / RUNSCRIPT コマンドを使用することができます。
@~features_1409_h2
キャッシュの設定
@~features_1409_p
関数はresult setを返します。このような関数はCALLステートメントと一緒に呼ばれます:
@~features_1410_h3
SimpleResultSetを使用する
@~features_1410_p
データベースは最も頻繁に使われるデータやインデックスページをメインメモリに保存します。キャッシュに使用されるメモリ量を CACHE_SIZE 設定を使用して変更することができます。この設定は、データベース接続URL (jdbc:h2:~/test;CACHE_SIZE=131072) か、ランタイムにSET CACHE_SIZE を使用してサイズを変更できます。
@~features_1411_p
result setを返す関数は、SimpleResultSetツールを使用して最初からこのresult setを作成することができます:
@~features_1412_h3
関数をテーブルとして使用する
@~features_1412_p
読んだり書いたりしたページや、現在使用されているキャッシュアルゴリズムの情報を得るためには、SELECT * FROM INFORMATION_SCHEMA.SETTINGS を呼びます。データとインデックスファイルに読み書きしたページ数が書かれています。
@~features_1413_h2
なぜJavaなのか
@~features_1413_p
result setを返す関数はテーブルのようになれます。しかし、このケースでは関数は少なくとも二回は呼ばれます: 最初はカラム名を集めるために構文解析している間です (コンパイル時に未知のところでパラメータはNULLに設定)。そして、データを取得するためにステートメントを実行している間です (これが結合なら繰り返されます)。関数がカラム一覧を取得するためだけに呼ばれたのなら、関数を認証する接続URLは jdbc:columnlist:connection です。そうでなければ、接続URLは jdbc:default:connection です。
@~features_1414_h2
トリガー
@~features_1414_p
Javaデータベースを使用するいくつかの理由:
@~features_1415_li
Javaアプリケーションの統合は非常に簡単
@~features_1415_p
このデータベースは、行が更新、挿入、または削除された前後に呼ばれるJavaトリガーをサポートしています。トリガーは複雑な一貫性チェックか、データベース内の関連したデータをアップデートするのに使用されます。マテリアライズドビューをシミュレートするためにトリガーを使用することも可能です。完全なサンプルアプリケーションは src/test/org/h2/samples/TriggerSample.java をご覧下さい。Javaトリガーは、インターフェイス org.h2.api.Trigger を実装しなければなりません:
@~features_1416_li
多数の異なったプラットフォームのサポート
@~features_1417_li
ネイティブアプリケーションより、より安全 (バッファーのオーバーフローがない)
@~features_1418_h2
データベースをコンパクトにする
@~features_1418_li
ユーザー定義関数 (またはトリガー) が非常に高速で実行される
@~features_1419_li
Unicodeをサポート
@~features_1419_p
データベースファイルの空のスペースは自動的に再利用されます。インデックスを再構築するもっとも簡単な方法は、データベースが閉じられている間に .index.db ファイルを削除します。しかし、一部状況では (例えば、データベースの多数のデータを削除した後)、データベースのサイズを縮小したい場合があります (データベースをコンパクトにする)。そのためのサンプルです:
@~features_1421_h2
キャッシュの設定
@~features_1421_p
たくさんの特徴がすでに組み込まれています (例えば、Unicode、ネットワークライブラリ)。安全なコードを書くのはとても簡単です。なぜなら、バッファーのオーバーフローとそのような問題はとても簡単に見つけることができるからです。反映メカニズムのようないくつかの特徴は、randomized testingのために使用されます。
@~features_1422_p
データベースは最も頻繁に使われるデータやインデックスページをメインメモリに保存します。キャッシュに使用されるメモリ量を CACHE_SIZE 設定を使用して変更することができます。この設定は、データベース接続URL (jdbc:h2:~/test;CACHE_SIZE=131072) か、ランタイムにSET CACHE_SIZE を使用してサイズを変更できます。
@~features_1425_h2
なぜJavaなのか
@~features_1426_p
Javaデータベースを使用するいくつかの理由:
@~features_1427_li
Javaアプリケーションの統合は非常に簡単
@~features_1432_p
低いレベルでのオペレーションでは、Javaはまだ低速すぎると思う方もいますが、そうではありません (それ以上でもありません)。一般的に、C、またはC++を使用するよりもずっと速くコードを書くことができます。このように、コードを移植して、低レベルのもの (スレッドのメモリ管理か取り扱いのような) に対処するよりもむしろ、アルゴリズムの改良(アプリケーションをより速くする) に集中することが可能です。ガーベジコレクションは今や手動でのメモリ管理よりおそらく速いでしょう。
@~installation_1031_td
src
@~installation_1032_td
Sourceファイル
......@@ -71,8 +71,8 @@ import org.h2.constant.SysProperties;
*/
public class Constants {
public static final int BUILD_ID = 61;
private static final String BUILD = "2007-11-10";
public static final int BUILD_ID = 62;
private static final String BUILD = "2007-11-25";
public static final int VERSION_MAJOR = 1;
public static final int VERSION_MINOR = 0;
......
......@@ -1269,12 +1269,11 @@ public class JdbcConnection extends TraceObject implements Connection {
public NClob createNClob() throws SQLException {
try {
int id = getNextId(TraceObject.CLOB);
debugCodeAssign("NClob", TraceObject.CLOB, id);
debugCodeCall("createNClob");
debugCodeAssign("NClob", TraceObject.CLOB, id, "createNClob()");
checkClosed();
ValueLob v = ValueLob.createSmallLob(Value.CLOB, new byte[0]);
return new JdbcClob(session, this, v, id);
} catch(Throwable e) {
} catch (Throwable e) {
throw logAndConvert(e);
}
}
......@@ -1388,7 +1387,7 @@ public class JdbcConnection extends TraceObject implements Connection {
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
throw Message.getUnsupportedException();
}
*/
......
......@@ -2655,7 +2655,7 @@ public class JdbcDatabaseMetaData extends TraceObject implements DatabaseMetaDat
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
debugCodeCall("isWrapperFor");
throw Message.getUnsupportedException();
}
......
......@@ -205,7 +205,7 @@ implements ParameterMetaData
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
debugCodeCall("isWrapperFor");
throw Message.getUnsupportedException();
}
......
......@@ -3156,8 +3156,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public NClob getNClob(int columnIndex) throws SQLException {
try {
int id = getNextId(TraceObject.CLOB);
debugCodeAssign("NClob", TraceObject.CLOB, id);
debugCodeCall("getNClob", columnIndex);
debugCodeAssign("NClob", TraceObject.CLOB, id, "getNClob(" + columnIndex + ")");
Value v = get(columnIndex);
return v == ValueNull.INSTANCE ? null : new JdbcClob(session, conn, v, id);
} catch (Throwable e) {
......@@ -3179,8 +3178,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public NClob getNClob(String columnName) throws SQLException {
try {
int id = getNextId(TraceObject.CLOB);
debugCodeAssign("NClob", TraceObject.CLOB, id);
debugCodeCall("getNClob", columnName);
debugCodeAssign("NClob", TraceObject.CLOB, id, "getNClob(" + columnName + ")");
Value v = get(columnName);
return v == ValueNull.INSTANCE ? null : new JdbcClob(session, conn, v, id);
} catch (Throwable e) {
......@@ -3401,7 +3399,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
debugCode("isWrapperFor");
throw Message.getUnsupportedException();
}
......
......@@ -441,7 +441,7 @@ public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaD
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
debugCodeCall("isWrapperFor");
throw Message.getUnsupportedException();
}
......
......@@ -867,7 +867,7 @@ public class JdbcStatement extends TraceObject implements Statement {
*/
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
throw Message.getUnsupportedException();
}
*/
......
......@@ -288,7 +288,7 @@ implements XADataSource, DataSource, ConnectionPoolDataSource, Serializable, Ref
//#ifdef JDK16
/*
public boolean isWrapperFor(Class<?> iface) throws SQLException {
public boolean isWrapperFor(Class< ? > iface) throws SQLException {
throw Message.getUnsupportedException();
}
*/
......
......@@ -24,8 +24,8 @@ import org.h2.util.IOUtils;
import org.h2.util.SortedProperties;
import org.h2.util.StringUtils;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
//import com.google.api.translate.Language;
//import com.google.api.translate.Translate;
public class PrepareTranslation {
private static final String MAIN_LANGUAGE = "en";
......@@ -55,7 +55,7 @@ public class PrepareTranslation {
// create the translated documentation
buildHtml("src/docsrc/text", "docs/html", "en");
buildHtml("src/docsrc/text", "docs/html", "de");
// buildHtml("src/docsrc/text", "docs/html", "de");
buildHtml("src/docsrc/text", "docs/html", "ja");
// convert the properties files back to utf8 text files, including the
......@@ -424,7 +424,7 @@ public class PrepareTranslation {
if (t == null) {
System.out.println(trans.getName() + ": key " + key
+ " not found in translation file; added dummy # 'translation'");
t = "#" + now;
t = "#" + autoTranslate(now, language);
}
p.put(key, t);
} else {
......@@ -473,17 +473,24 @@ public class PrepareTranslation {
}
private String autoTranslate(String original, String language) {
if (original == null || original.trim().length() == 0) {
return original;
}
String translation = original;
if (!AUTO_TRANSLATE) {
return "#" + translation;
}
if ("de".equals(language)) {
try {
return "#" + Translate.translate(original, Language.ENGLISH, Language.GERMAN);
} catch (IOException e) {
e.printStackTrace();
}
}
// if ("de".equals(language)) {
// try {
// Thread.sleep(5000);
// translation = Translate.translate(original, Language.ENGLISH, Language.GERMAN);
// System.out.println("original: " + original);
// System.out.println("translation: " + translation);
// } catch (Throwable e) {
// System.out.println("Exception translating [" + original + "]: " + e);
// // e.printStackTrace();
// }
// }
return "#" + translation;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论