2016-07-04 7 views
2

モックデータを挿入しようとしていますH2で休止状態を使用してDB、私はに起因する誤差"原因:java.lang.IllegalStateException:ファイルがロックされています:nio:/Development/hiber/data/contactmgr.mv.db [1.4.192/7]"

次直面しています:java.lang.IllegalStateException:ファイルがロックされている: NIO:[1.4 /Development/hiber/data/contactmgr.mv.dbを。 192/7]

以前は、ユーザー名とパスワードのプロパティが原因だと思っていましたが、hibernate.cfg.xmlから削除してもこのエラーが発生しました。

java.lang.ExceptionInInitializerError はによって引き起こされるスレッドの例外 "メイン":org.hibernate.exception.JDBCConnectionException:エラー呼び出しドライバー位org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator $ 1から を接続$ 1.convert(BasicConnectionCreator.java:122) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator。 (コンストラクタ) ORGでorg.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) でorg.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106) で。 hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)で org.hibernate.engine.jdbc.internal.JdbcServicesImplで 。 (JdbcServicesImpl.java:94) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) rvice org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)でorg.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) で(StandardServiceRegistryImpl.java:111) でorg.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:272)org.hibernate.service.internalで でorg.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:147) 。 AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:231) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibe rnate.metamodel.source.internal.MetadataImpl。(MetadataImpl.java:120) at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:123) at org.hibernate.metamodel.MetadataSources.buildMetadata (MetadataSources.java:151) at com.hibernate.demo.Application.buildSesssionFactory(Application.java:46) at com.hibernate.demo.Application(Application.java:17) 原因:org.h2。 jdbc.JdbcSQLException:データベースはすでに使用されている可能性があります。考えられる解決策:他のすべての接続を閉じる。 サーバーモード[90020-192] をorg.h2.message.DbException.getJdbcSQLException(DbException.java:345) (org.h2.message.DbException.get(DbException.java:168) )で使用してください。 h2.mvstore.db.MVTableEngine $ Store。(MVTableEngine.java:99) でのコンバーターの無効化(MVTableEngine.java:187) at org.h2.mvstore.db.MVTableEngine $ Store.open(MVTableEngine.java:167) at org.h2.mvstore.db.MVTableEngine.init (データベース.java:2463) 、org.h2.engine.Database.opPage java:270) at org.h2.engine.Database(Database.java:264) at org.h2.engine.Engine.openSession(Engine.java:64) at org.h2.engine.Engine.openSession (Engine.java:176) at org.h2.engine.Engine.createSessionAndValidate(Engine.java:154) at org.h2.engine.Engine.createSession(Engine.java:137) a (JdbcConnection.java:Session.java: 118) at org.h2.jdbc.JdbcConnection。(JdbcConnection.java:102) at org.h2.Driver.connect(Driver.java:72) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator .makeConnection(DriverConnectionCreator.java:55) ... 19 more 原因:java.lang.IllegalStateException:ファイルがロックされています:nio:/Development/hiber/data/contactmgr.mv.db [1.4.192/7 ] at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:773) at org.h2.mvstore.FileStore.open(FileStore.java:172)(MVStore.java:344) at org.h2.mvstore.MVStore $ Builder.open(MVStore.java:2893) at org.h2.mvstore.db.MVTableEngine $ Store .open(MVTableEngine.java:154) ... 34もっと

これは、使用中の私のhibernate.cfg.xmlファイルです:

<?xml version='1.0' encoding='utf-8'?> 

<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

    <session-factory> 

     <!-- Database connection settings --> 
     <property name="connection.driver_class">org.h2.Driver</property> 
     <property name="connection.url">jdbc:h2:./data/contactmgr</property> 


     <property name="hibernate.default_schema">PUBLIC</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.H2Dialect</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 

     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 

     <!-- Drop and re-create the database schema on startup --> 
     <property name="hbm2ddl.auto">create</property> 

     <property name="show_sql">true</property> 

     <mapping class="com.hibernate.demo.model.Contact"/> 

    </session-factory> 

</hibernate-configuration> 

と、次は私のメインクラスです。

public class Application { 

    //Session factory 
    private static final SessionFactory sessionFactory = buildSesssionFactory(); 

    public static void main(String[] args) { 

     Contact contact = new Contact.ContactBuilder("Bob", "marley").withEmail("[email protected]").withPhone(5859789791L).build(); 

     //Open a Session 

     Session session = sessionFactory.openSession(); 

     //Begin a Transaction 
     session.beginTransaction(); 


     //Use the session to save the contact 

     session.save(contact); 
     //Commit the transaction 

     session.getTransaction().commit(); 
     // Close the session 
     session.close(); 
    } 

    private static SessionFactory buildSesssionFactory() { 
     // Create a StandardServiceRegistry 
     Configuration configuration = new Configuration(); 
     configuration.configure("hibernate.cfg.xml"); 
     final ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
     return new MetadataSources(registry).buildMetadata().buildSessionFactory(); 

答えて

2

この例外はスローされます。b H 2 dbファイルが既に使用されています。

  1. は、あなたは、単にファイルを削除しようとしたし、それに属している他の中間ファイルをALLE持っている: (たぶん理由はあなたといくつかの矛盾や同様の問題のDBファイル)

    私は以下の提案しますフォルダ?その後、ちょうど新しいdbファイルで新しくアプリケーションを再起動します。

  2. アプリケーションを2回開いてエラーが発生している可能性がありますか?すべてのインスタンスを閉じると、例外が取り除かれます。あなたは、データベース上の任意のロックをしたくない場合は、次のよう

+1

解決済み、それは2番目のポインそれを引き起こしていたソリューションでは、H2インスタンスがバックグラウンドで実行されていて、私のアプリケーションは同じポートで新しいインスタンスをスピンしようとしていました。ありがとう – Shek

0

、あなたのデータベース接続URLを設定することができます。

<property name="connection.url">jdbc:h2:./data/contactmgr;DB_CLOSE_ON_EXIT=TRUE;FILE_LOCK=NO</property> 

ドキュメント:

関連する問題