首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成sql脚本

生成sql脚本
EN

Stack Overflow用户
提问于 2009-06-30 06:38:43
回答 1查看 8.3K关注 0票数 7

有没有什么hibernate实用程序可以用来连接数据库。列出所有的表,并生成“创建表+数据”的sql脚本并另存为*.sql?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-30 10:05:53

sql将数据从数据库导出为

使用liquibase开源项目

LiquiBase是一个开源的独立于数据库的库,用于跟踪、管理和应用数据库更改。它建立在一个简单的前提之上:所有数据库更改(结构和数据)都以基于XML的描述性方式存储,并签入到源代码控制中。

为给定的实体生成创建和删除脚本

我们使用下面的代码来生成drop和create语句:只需使用所有实体类构造这个类,然后调用create/dropTableScript。

如果需要,您可以改用persitence.xml和instead单元名称。只要说点什么,我也会把代码贴出来。

代码语言:javascript
复制
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<Class<?>> 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();
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1062058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档