2009-06-30 63 views
6

có bất kỳ utitliy hibernate nào mà tôi có thể sử dụng để kết nối với cơ sở dữ liệu hay không. liệt kê tất cả các bảng và tạo kịch bản lệnh sql cho "tạo bảng + dữ liệu" và lưu dưới dạng * .sql?tạo tập lệnh sql

Trả lời

7

Xuất dữ liệu từ một cơ sở dữ liệu như sql

Sử dụng dự án liquibase opensource

LiquiBase là một mã nguồn mở (LGPL), thư viện cơ sở dữ liệu độc lập để theo dõi, quản lý và áp dụng thay đổi cơ sở dữ liệu. Nó được xây dựng trên một tiền đề đơn giản: Tất cả các thay đổi về cơ sở dữ liệu (cấu trúc và dữ liệu) được lưu trữ theo cách mô tả dựa trên XML và được kiểm tra vào kiểm soát nguồn.

Generate tạo và thả kịch bản cho các đối tượng được JPA

Chúng tôi sử dụng mã này để tạo ra sự sụt giảm và tạo báo cáo: Chỉ cần xây dựng lớp học này với tất cả các lớp thực thể và gọi tạo/dropTableScript.

Nếu cần, bạn có thể sử dụng tên đơn vị persitence.xml và persitance. Chỉ cần nói điều gì đó và tôi cũng đăng mã.

 
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

điều này yêu cầu bạn phải có đối tượng miền để chuyển sang tập lệnh sql phải không? những gì tôi muốn là. chỉ cần kết nối với máy chủ cơ sở dữ liệu và liệt kê tất cả các bảng và tạo ra các kịch bản tạo bảng. khả thi? – cometta

+0

Ngay khi bạn cần những thứ này (trong perstiance.xml hoặc trong một Danh sách > Khác bạn có thể sử dụng liquibase, xuất dữ liệu bao gồm lược đồ ddl từ một kết nối jdbc đã cho. patching ...) Một cách khác là sử dụng con dao quân đội Thụy Sĩ DBVisualizer tại nơi làm việc yêu thích của chúng tôi absoulte (trong phiên bản cá nhân miễn phí !, viết bằng java sử dụng JDBC) – H2000

+0

hi, tôi đã cố gắng sử dụng dbvisualizer, tôi có thể thấy -> bảng, xem "cho cơ sở dữ liệu của tôi. Làm thế nào để xuất bảng và dữ liệu vào tập lệnh sql? – cometta

Các vấn đề liên quan