2010-11-27 18 views
2

Spring Web-MVCで書かれた私のWebアプリケーションは、JDBCを使ってデータを処理します。私は、エンドユーザーが最初にそれを実行するとき(ただし、スキーマを作成した後に再度実行するとき)、自動的にテーブル(およびスキーマ)を作成するようにしたいと考えています。私はデータベースエンジンとしてHSQLDBを使用しています。JDBCテーブルを作成

どのようにすればいいですか? (私はアプリの中に特殊なチェックメソッドを書いて、テーブルが存在するかどうか、テーブルが存在しないのかどうか、それらを作成するのは望ましくありません。私は単純な接続方法の代わりにHibernateを使うことを考えています。 Hibernateを使って解決する方法はありますか?

答えて

3

私はアプリの中に特別な検査方法を書いていない、テーブルが存在していない、そうでない場合は作成することを望んでいません。もっと便利な方法がありますか?

ウェブアプリケーションのインストーラでDBを作成するだけです。これはウェブベースで行うこともできます。

代わりに、ServletContextListenerを実装して、DBをチェックし、必要に応じてテーブルを作成します。 ServletContextListenerはアプリケーション起動時に一度だけ実行されるため、リクエストごとにチェックする必要はありません。

+0

ああ...これは私が必要なものです!このような状況でServletContextListenerの使用法の例やリンクを教えてください。 – Ilnur

+0

[この回答]に例があります(http://stackoverflow.com/questions/4175726/how-do-i-load-a-java-class-not-a-servlet-when-the-tomcat-server-開始/ 4175742#4175742)。 – BalusC

+0

はい、私はそれをキャッチします。しかし、私はBeanをServletContextListenerの中に入れることに大きな問題があります。このクラスの一部のフィールドを@Autowireにする方法(例:DBInitService dbInitServiceのようなフィールド) dataSourceもBeanなので、私のアプリにautowiredする必要があります。しかし、このリスナーの中で私はこのクラスを手に入れることはできません。また、私はautowiredされるリスナーにすることはできません。どうやってするの? – Ilnur

1

私は春に基づいてアプリケーションを作成し始めました。私はデータベースアクセス層の実装のためにJPA + Hibernateを使用しています。この方法の良い副作用の1つは、記述しているとおりの振る舞いです。つまり、データベースはアプリケーションの起動時に自動的に作成されます。それは非常に便利です。私はこのプロジェクトでSQLに1行も書いていないし、索引、外部キーやプライマリキーなどのデータベースを持っている。それは素晴らしいことだし、同じことをお勧めする。

+0

ああ...面白いね!シーケンスはどうですか?彼らはまた作品ですか? – Ilnur

2

スプリングJDBCはstandard mechanism for initializing databasesです。

データベースを初期化したいとあなたは春-JDBC名前空間で初期化・データベースのタグを使用して、データソースBeanへの参照を提供することができた場合:

<jdbc:initialize-database data-source="dataSource">` 
    <jdbc:script location="classpath:com/foo/sql/db-schema.sql"/> 
    <jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/> 
</jdbc:initialize-database> 

あなたはまた、有効にすることができますこの上、またはシステムプロパティを使用してオフ:休止状態の使用について

<jdbc:initialize-database data-source="dataSource" 
    enabled="#{systemProperties.INITIALIZE_DATABASE}"> 
    <jdbc:script location="..."/> 
</jdbc:initialize-database> 

:hibernまた、データベーススキーマを自動的に生成することもできます。Automatic Schema Generation

+0

このプロパティを使用する場合、は既に存在する場合はスキーマを再作成しますか? – Ilnur

+0

@Ilnurそれを処理する2つの方法。 a)防御的にSQLをコードする。(例えば '%HOME%/。yourapp/.schemagen')このファイルが存在するかどうかを確認します(例:SpEL:http://static.springsourceを使用してください)。 org/spring/docs/3.0.x/spring-framework-reference/html/expressions.html) –

関連する問題