2009-06-30 29 views
6

veritabanına bağlanmak için kullanabileceğiniz herhangi bir hazırda bekletme yoktur. tüm tabloları listeleyip "tablo + verileri oluştur" ve ".sql" olarak kaydetmek için sql komut dosyası oluşturulsun mu? sql olarak bir veritabanındansql betikleri oluşturmak

cevap

7

İhracat verileri

Kullanım liquibase opensource projeyi

LiquiBase bir açık kaynak (LGPL), izleme, yönetme ve veritabanı değişiklikleri uygulamak için veritabanı bağımsız kütüphanesidir. Basit bir öncül üzerine inşa edilmiştir: Tüm veritabanı değişiklikleri (yapı ve veri) XML tabanlı açıklayıcı bir şekilde saklanır ve kaynak kontrolüne kontrol edilir. Sadece tüm varlık sınıfları ile bu sınıfı oluşturmak ve/dropTableScript oluşturmak çağırır:

oluşturmak ve verilen JPA varlıkları

Biz düşüşünü oluşturmakta ve ifadeleri oluşturmak için bu kodu kullanabilirsiniz senaryosunu damla oluşturur.

Gerekirse, bunun yerine bir persitence.xml ve persitance birim adı kullanabilirsiniz. Sadece bir şey söyle ve ben de kodu gönderiyorum.

 
import java.util.Collection; 
import java.util.Properties; 

import org.hibernate.cfg.AnnotationConfiguration; 
import org.hibernate.dialect.Dialect; 
import org.hibernate.ejb.Ejb3Configuration; 

/** 
* SQL Creator for Tables according to JPA/Hibernate annotations. 
* 
* Use: 
* 
* {@link #createTablesScript()} To create the table creationg script 
* 
* {@link #dropTablesScript()} to create the table destruction script 
* 
*/ 
public class SqlTableCreator { 

    private final AnnotationConfiguration hibernateConfiguration; 
    private final Properties dialectProps; 

    public SqlTableCreator(final Collection> entities) { 

     final Ejb3Configuration ejb3Configuration = new Ejb3Configuration(); 
     for (final Class entity : entities) { 
      ejb3Configuration.addAnnotatedClass(entity); 
     } 

     dialectProps = new Properties(); 
     dialectProps.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect"); 

     hibernateConfiguration = ejb3Configuration.getHibernateConfiguration(); 
    } 

    /** 
    * Create the SQL script to create all tables. 
    * 
    * @return A {@link String} representing the SQL script. 
    */ 
    public String createTablesScript() { 
     final StringBuilder script = new StringBuilder(); 

     final String[] creationScript = hibernateConfiguration.generateSchemaCreationScript(Dialect 
       .getDialect(dialectProps)); 
     for (final String string : creationScript) { 
      script.append(string).append(";\n"); 
     } 
     script.append("\ngo\n\n"); 

     return script.toString(); 
    } 

    /** 
    * Create the SQL script to drop all tables. 
    * 
    * @return A {@link String} representing the SQL script. 
    */ 
    public String dropTablesScript() { 
     final StringBuilder script = new StringBuilder(); 

     final String[] creationScript = hibernateConfiguration.generateDropSchemaScript(Dialect 
       .getDialect(dialectProps)); 
     for (final String string : creationScript) { 
      script.append(string).append(";\n"); 
     } 
     script.append("\ngo\n\n"); 

     return script.toString(); 
    } 
} 

+2

Bu, sql betiğine dönüştürülmesini sağlamak için etki alanı nesnesinin olmasını ister misiniz? istediğim şey. sadece veritabanı sunucusuna bağlanın ve tüm tabloları listeleyip tablo oluştur komut dosyası oluşturun. mümkün? – cometta

+0

Sağlamlıklara ihtiyacınız var (perstiance.xml dosyasında veya Listede > . Else, belirli bir jdbc bağlantısından bir ddl şema dahil veri ihraç eden liquibase'i kullanabilir, çok daha fazlasını düşünebilir (şema farklıdır, yamalama ...) Başka bir şekilde çalışmak için DBVisualizer swiss ordu bıçağı kullanmak bizim absoulte favori (kişisel baskı ücretsiz!, java yazılmış JDBC kullanır) – H2000

+0

Merhaba, dbvisualizer kullanmaya çalıştı, ben görebilirsiniz -> tablo, "veritabanım için. tabloları ve verileri sql betiğine nasıl aktarabilirim? – cometta

İlgili konular