問題タブ [h2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ビューが存在しない場合は作成しますか?
create view if not exists
MySQL または H2 データベースにアクセスする方法はありますか?
android - Android での H2 データベースと SQLite の比較
Android の組み込み SQLite データベースで Unicode がサポートされていないため
H2 データベースと Android SQLiteのパフォーマンスと安定性に主に関心があります
皆さん、使っていますか?H2 データベースの欠点に注意する必要がありますか?
java - H2をSpringで動作させるにはどうすればよいですか?
Springのを拡張するテストを書いていますAbstractTransactionalJUnit4SpringContextTests
。
私のアプリケーションコードには、次の注釈が付いたテスト内で呼び出すメソッドがあります。
問題
H2
基になるデータソースのメモリ内モードとして使用しているときに問題が発生しました。それは私にエラーを与えます:
Caused by:
org.h2.jdbc.JdbcSQLException: Timeout trying to lock table
MY_TABLE[50200-131]
伝播を削除すると機能し、OracleやMySQLなどの代替データベースをで使用するとPropagation.REQUIRES_NEW
すべてが正常に機能します。
私はSpring3.0.2-RELEASE
とを使用していH2 1.2.131
ます。
H2
Springを使用するにはどうすればよいですか?
java - 名前がわからないLiquibaseドロップ制約
データベースの変更を追跡するためにliquibaseを使用します。最初のchangeSetには次の行が含まれています。
基本的には、SHORT_ID列に一意の制約があることを意味しますが、この制約の名前は任意であり、通常は毎回異なります(H2データベースに対していくつかの統合テストを実行し、テストを実行するたびに新しいベースが作成されます)
したがって、問題は次のとおりです。この最初のchangeSetを変更することはできませんが、この一意の制約を取り除く必要があります。liquibaseを使用してそれを達成する方法はありますか?
java - Oracleインスタンスからインメモリデータベース構造を作成します
多くの「単体」テストが実行中にOracleデータベースへの実際の接続を使用するアプリケーションがあります。
ご想像のとおり、これらのテストは、いくつかのSpringコンテキストを初期化し、Oracleインスタンスと通信する必要があるため、実行に時間がかかりすぎます。それに加えて、テスト実行後のデータベースの変更を回避するために、トランザクションなどの複雑なメカニズムを管理する必要があります(Springのような便利なクラスを使用している場合でもAbstractAnnotationAwareTransactionalTests
)。
したがって、私の考えは、このOracleテストインスタンスをインメモリデータベースに段階的に置き換えることです。私は使うhsqldb
か、多分もっと良いでしょうh2
。
私の質問は、それを行うための最良のアプローチは何かを知ることです。私の主な関心事は、インメモリデータベース構造の構築と参照データの挿入に関連しています。
もちろん、SQL Developer
またはなどのツールを使用してOracleからデータベース構造を抽出し、TOAD
これらのスクリプトを変更してhsqldb
またはのh2
言語に適合させることもできます。しかし、それがより良いアプローチだとは思いません。
実際、私はすでにを使用して別のプロジェクトhsqldb
でそれを行いましたが、テーブルを作成するためにすべてのスクリプトを手動で作成しました。幸い、作成するテーブルはほとんどありませんでした。このステップでの私の主な問題は、テーブルの作成に使用されるOracleスクリプトを言語に「変換」することでしたhsqldb
。
たとえば、次のsqlコマンドを使用してOracleで作成されたテーブル:
次の目的で「翻訳」する必要がありますhsqldb
。
私の現在のプロジェクトでは、手動でそれを行うにはテーブルが多すぎます...
だから私の質問:
- それを達成するためにあなたが私に与えることができるアドバイスは何ですか?
- Oracle接続からスクリプトを生成するためのツールを提供しています
h2
か?hsqldb
技術的な案内
Java 1.6、Spring 2.5、Oracle 10.g、Maven 2
編集
私のユニットテストに関するいくつかの情報:
私が使用したアプリケーションでhsqldb
は、次のテストを行いました。-DBとは関係のないいくつかの「基本的な」単体テスト。-DAOテストでは、hsqldb
CRUDなどのデータベース操作を実行していました。-次に、サービスレイヤーで、Mockito
アプリケーション全体(つまり、サービス+ dao + DB)ではなく、サービステストに焦点を合わせるために、DAOオブジェクトをモックしていました。
現在のアプリケーションでは、最悪のシナリオがあります。DAOレイヤーのテストでは、Oracle接続を実行する必要があります。サービスレイヤーは、DAOをシミュレートするために(まだ)モックオブジェクトを使用しません。したがって、サービステストにはOracle接続も必要です。
モックとインメモリデータベースは2つの別個のポイントであることを認識しており、できるだけ早くそれらに対処します。ただし、最初のステップは、インメモリデータベースによってOracle接続を削除することです。次に、知識を使用しMockito
てテストを強化します。
また、単体テストを統合テストから分離したいことに注意してください。後者は、「実際の」テストを実行するためにOracleデータベースにアクセスする必要がありますが、私の主な関心事(そしてこれがこの質問の目的です)は、今日、ほとんどすべての単体テストが単独で実行されていないことです。
sql - H2 データベース: INFORMATION_SCHEMA の主キーに関する情報
H2 で次のテーブルを作成します。
次に、INFORMATION_SCHEMA.TABLES テーブルを調べます。
結果:
次に、INFORMATION_SCHEMA.CONSTRAINTS テーブルを調べます。
結果:
これらのステートメントは私が述べたものではありません。したがって、質問は次のとおりです。TABLES と CONSTRAINS の情報は、データベースで実行された実際の SQL をどのように反映していますか?
- 元の CREATE TABLE ステートメントには、CACHEDという単語はありませんでした。(問題ない)
- ALTER TABLE .. ADD CONSTRAINTステートメントを実行したことがありません。
私が質問をしている実際の理由は、主キーがクラスター化インデックスで使用されることを保証するためにどのステートメントを実行すればよいかわからないためです。私の以前の質問H2 database: clustered index supportを見ると、Thomas Mueller の回答に次のステートメントが見つかるかもしれません。
テーブルの作成後に主キーが作成された場合、主キーは新しいインデックス B ツリーに格納されます。
したがって、INFORMATION_SCHEMA に示されているようにステートメントを実行すると、テーブルの作成後に主キーが作成されるため、ID はクラスター化インデックスで (基本的にデータ B ツリーのキーとして) 使用されません。
H2 のクラスター化インデックスで主キーが使用されていることを保証する方法はありますか?
performance - H2データストアは非常に遅いですか?(実際にはそうではありません!編集を参照してください)
H2データストアをテストしました(Datanucleus 2.xを使用)
パフォーマンスは非常に遅いです。Postgresの1/3とMySQLの1/10(約)
「スペック」にはとても満足しましたが、「実際の使い方」では見えません。 http://www.h2database.com/html/performance.html
私が見逃しているかもしれないパフォーマンスチューニングはありますか?
編集:
H2はSLOWではありません。これまでにテストした中で最速のRDBMSの1つです!
このDBエンジンの素晴らしい速度を得るためにWEBMANAGER(H2コンソール)を使用してデータベースに接続する必要がある理由を説明するのに助けが必要です... H2WEBコンソール"etvoilá"を介して接続したときに誤ってアプリをテストしました、問題解決しました。
なんで?
hibernate - TomcatでHibernateを使用して、H2データベースファイルの相対パスを指定するにはどうすればよいですか?
私はかなり一般的でなければならないセットアップを持っています:私はdbファイルを備えたH2dbを持っています。スタンドアロンモードでdbを使用しています。Hibernateはdbへのアクセスを提供し、コードをTomcatにデプロイしました。
問題は次のとおりです。dbファイルをに配置しwar
、休止状態の構成ファイルに相対パスを指定するだけの良い方法を見つけることができませんでした。
現時点ではc://whatever_db_file_container_dir/dbname
、Hibernate構成でへのパスを使用する必要があります。
これにより、ゼロ構成Webアプリをデプロイできなくなります。このセットアップを自己完結型のゼロ構成パッケージに変える方法はありますか?
java - H2 データベース エラー メッセージのローカリゼーション
H2 データベースの例外メッセージに問題があります。メッセージの言語は、OS の言語 (私は Windows を使用しています) に対応しています。ローカリゼーション機能をオフにして、英語のみでメッセージを受け取ることはできますか?
java - 移行のための JPA/Hibernate サポート?
私は現在、JPA/Hibernate を使用して H2 データベースにデータを保持するデスクトップ アプリケーションに取り組んでいます。将来何らかの理由でデータベース スキーマを変更する必要がある場合、どのような選択肢があるのか知りたいです。おそらく、新しいエンティティを導入したり、それらを削除したり、エンティティのプロパティのタイプを変更したりする必要があります。
- これを行うための JPA/Hibernate のサポートはありますか?
- ソリューションを手動でスクリプト化する必要がありますか?