2013-03-23 107 views
0

我一直在學習使用databene benerator(最新的0.8.1), 但我有一個問題,試圖填充H2數據庫(1.3.170和現在1.3.171) 。 首先我是越來越目錄空例外,但深入閱讀benerator文檔(0.7.6),我發現這個databene benerator拋出表空異常

When importing database metadata, you might encounter exceptions when Benerator tries to get metadata of catalogs or schemas it has no access privileges to. Usually can fix this by choosing the right schema for your database, e.g. <database id="db" ... schema="PUBLIC" />

Table X not found in the expected catalog Y and schema Z This message tells you, that you database configuration is wrong. Check and fix the 'schema' and 'catalog' settings in your database configuration, e.g. <database … catalog="main" schema="Z" />

,所以我寫了明確數據庫標籤中的目錄和模式名稱

<database id="db" 
     url="jdbc:h2:tcp://localhost/D:/databases/databaseName" 
     driver="org.h2.Driver" 
     schema="PUBLIC" 
     user="admin" 
     catalog = "DATABASENAME" 
     password="xxxxxx" 
    /> 

但後來我開始時benerator剛剛開始填充第一表表空例外,這裏是堆棧跟蹤

D:\test3> benerator benerator.xml 
Local classpath: .;D:\databene-benerator-0.8.1\bin;D:\databene-benerator-0.8.1\lib\* 
12:06:58,495 INFO (main) [CONFIG] Running file benerator.xml 
12:06:58,511 INFO (main) [CONFIG] Benerator 0.8.1 build 2335 
12:06:58,511 INFO (main) [CONFIG] Java version 1.7.0_17 
12:06:58,511 INFO (main) [CONFIG] JVM Java HotSpot(TM) Client VM 23.7-b01 (Oracle 
Corporation) 
12:06:58,511 INFO (main) [CONFIG] OS Windows 7 6.1 (x86) 
12:06:58,511 INFO (main) [CONFIG] Installed JSR 223 Script Engines: 
12:06:58,526 INFO (main) [CONFIG] - Mozilla Rhino[js, rhino, JavaScript, javascript, 
ECMAScript, ecmascript] 
12:06:58,526 INFO (main) [CONFIG] Max heap size: 247 MB 
12:06:58,636 DEBUG (main) [CONFIG] Initializing Script mapping from file org/databene 
/script/script.properties 
12:06:59,837 DEBUG (main) [COMMENT] Reproduces an existing database 
12:06:59,837 DEBUG (main) [COMMENT] defining a database that will be referred by the 
id 'db' later 
12:06:59,868 DEBUG (main) [COMMENT] Drop the current tables and sequences if they 
already exist 
12:06:59,884 INFO (main) [EvaluateStatement] Executing script drop_hotel_tables.sql 
12:07:00,118 INFO (main) [JDBC] Connected to H2 1.3.171 (2013-03-17) 
12:07:00,118 INFO (main) [JDBC] Using driver H2 JDBC Driver 1.3.171 (2013-03-17) 
12:07:00,118 INFO (main) [JDBC] JDBC version 4.0 
12:07:00,180 DEBUG (main) [COMMENT] Create the tables and sequences 
12:07:00,180 INFO (main) [EvaluateStatement] Executing script create_tables_h2.sql 
12:07:00,227 DEBUG (main) [COMMENT] Generating a single constant profile... 
12:07:00,305 INFO (main) [JDBCDBImporter] Importing tables from environment '___temp' 
12:07:00,336 INFO (main) [DefaultDBSystem] Fetching table details and ordering 
tables by dependency 

12:07:00,508 INFO (main) [TaskExecutor] Running task 
StateTrackingTaskProxy[GenerateAndConsumeTask(PROFILE)] 
12:07:00,508 ERROR (main) [DescriptorRunner] Error in Benerator execution 
    org.databene.commons.ObjectNotFoundException: Table null 
    at org.databene.platform.db.DBSystem.getTable(DBSystem.java:802) 
    at org.databene.platform.db.DBSystem.getWriteColumnInfos(DBSystem.java:744) 
    at org.databene.platform.db.DBSystem.persistOrUpdate(DBSystem.java:831) 
    at org.databene.platform.db.DBSystem.store(DBSystem.java:360) 
    at 

    org.databene.benerator.storage.StorageSystemInserter.startProductConsumption(
    StorageSystemInserter.java:53) 
    at 
    org.databene.benerator.consumer.AbstractConsumer.startConsuming(AbstractConsumer. 
    java:47) 
    at 
    org.databene.benerator.consumer.ConsumerProxy.startConsuming(
    ConsumerProxy.java:62) 
    at org.databene.benerator.engine.statement.ConsumptionStatement.execute(
    ConsumptionStatement.java:53) 
    at org.databene.benerator.engine.statement.GenerateAndConsumeTask.execute(
    GenerateAndConsumeTask.java:159) 
    at org.databene.task.TaskProxy.execute(TaskProxy.java:59) 
    at org.databene.task.StateTrackingTaskProxy.execute(StateTrackingTaskProxy.java:52) 
    at org.databene.task.TaskExecutor.runWithoutPage(TaskExecutor.java:136) 
    at org.databene.task.TaskExecutor.runPage(TaskExecutor.java:126) 
    at org.databene.task.TaskExecutor.run(TaskExecutor.java:101) 
    at org.databene.task.TaskExecutor.run(TaskExecutor.java:77) 
    at org.databene.task.TaskExecutor.execute(TaskExecutor.java:71) 
    at org.databene.benerator.engine.statement.GenerateOrIterateStatement.executeTask(
    GenerateOrIterateStatement.java:156) 
    at org.databene.benerator.engine.statement.GenerateOrIterateStatement.execute(
    GenerateOrIterateStatement.java:99) 
    at 
    org.databene.benerator.engine.statement.LazyStatement.execute(LazyStatement. 
    java:58) 
    at 
    org.databene.benerator.engine.statement.StatementProxy.execute(
    StatementProxy.java:46) 
    at org.databene.benerator.engine.statement.TimedGeneratorStatement.execute(
    TimedGeneratorStatement.java:70) 
    at  
    org.databene.benerator.engine.statement.SequentialStatement.executeSubStatements(
    SequentialStatement.java:52) 
    at org.databene.benerator.engine.statement.SequentialStatement.execute(
    SequentialStatement.java:47) 
    at org.databene.benerator.engine.BeneratorRootStatement.execute(
    BeneratorRootStatement.java:63) 
    at 
    org.databene.benerator.engine.DescriptorRunner.execute(DescriptorRunner.java:127) 
    at org.databene.benerator.engine.DescriptorRunner.runWithoutShutdownHook(
    DescriptorRunner.java:109) 
    at org.databene.benerator.engine.DescriptorRunner.run(DescriptorRunner.java:102) 
    at org.databene.benerator.main.Benerator.runFile(Benerator.java:99) 
    at org.databene.benerator.main.Benerator.runFromCommandLine(Benerator.java:82) 
    at org.databene.benerator.main.Benerator.main(Benerator.java:75) 
12:07:00,617 INFO (main) [CachingDBImporter] Exporting Database meta data of ___temp 
to cache file 
12:07:00,695 INFO (main) [CONFIG] Max. committed heap size: 15 MB 

可能是什麼問題,或者沒有忘記做什麼?因爲當我使用「複製和擴展現有數據庫」來創建項目時,即使主鍵和外鍵以及唯一的限制,benerator也能正確捕獲所有表。幫助將不勝感激 我還沒有發現任何其他的數據生成器,足夠靈活,開源,可擴展,並支持JDBC和Java數據庫

+1

爲什麼不從生成器生成純文本(又名「CSV」)文件並將它們加載到數據庫中? – 2013-03-23 12:23:23

+0

那你怎麼保持外鍵約束呢? – Obby 2013-03-23 12:29:53

+0

在數據庫中定義它們。 – 2013-03-23 12:59:22

回答

0

這是我終於實現了databene benerator。如果您使用mysql作爲您選擇的數據庫,請始終讓數據庫定義中的schemacatalog屬性與數據庫名稱相同。像這樣

<database id="db" 
    url="jdbc:mysql://localhost:3306/DatabaseName" 
    driver="org.h2.Driver" 
    schema="DatabaseName" 
    catalog = "DatabaseName" 
    user="admin" 
    password="xxxxxx" 
/> 

它會給你喜歡

[WARNING] Table 'TableName' not found in the expected catalog 'DatabaseName' and schema 'DatabaseName'. I have taken it from catalog 'DatabaseName' and schema 'null' instead. You better make sure this is right and fix the configuration 

輸出,但它實際上是做你想要什麼。我還沒有嘗試過其他數據庫,但我希望它也適用於他們。