gpt4 book ai didi

database - 以编程方式捕获 Derby 数据库的数据库创建命令

转载 作者:搜寻专家 更新时间:2023-10-30 23:39:18 24 4
gpt4 key购买 nike

假设我有一个现有的嵌入式 Derby 数据库,我想对创建该数据库所需的 SQL 命令进行逆向工程。有许多工具可以通过允许用户选择一个表并获取该表的创建脚本来实现这一点。 SQuirreL SQL、NetBeans 等允许此功能。我有兴趣了解执行此操作所采用的方法。

这个问题的动机是通过编程方式(通过 JDBC)从数据库中删除所有数据(而不破坏数据库的结构)。为此,您通常需要删除对数据库的约束,然后发出 SQL 截断命令。看这个post对于和概述的方法。但是,移除约束会改变结构。

如果我可以(通过 SQL 或 JDBC 方法)对任何数据库的创建脚本进行逆向工程,那么当数据库需要刷新(清除所有数据)时,我可以只捕获创建脚本,删除数据库,然后重新创建- 通过脚本创建数据库。我想为任意数据库执行此操作。一种仅使用 JDBC 并可与任何 JDBC 兼容数据库一起使用的方法是理想的。

其他相关的 StackOverFlow Q/A 包括如何 truncate all tables in MySQL此处的建议似乎是特定于 MySQL 的,但确实提供了一些见解。似乎没有办法 turn of referential constraints对于 Derby 。

也许已经为此开发了一个开源 API。在不得不自己动手之前,我正在寻找一些想法。

最佳答案

我使用 Gord Thompson 指出的 DdlUtils 构建了一个测试。我能够重现创作脚本。

我在安装 Derby 时获得的基本 jdbcDemo 数据库上进行了测试。您需要运行 Derby docs 中讨论的提供的 WwdEmbedded.java 类.在我的示例中创建数据库。

示例代码如下:

    // the database name
String dbName = "jdbcDemoDB";
// define the Derby connection URL to use
String connURL = "jdbc:derby:" + dbName;

EmbeddedDataSource eds = new EmbeddedDataSource();
//eds.setConnectionAttributes(connURL);
eds.setDatabaseName(dbName);
System.out.println(eds);
try {
Platform p = PlatformFactory.createNewPlatformInstance(eds);
Database db = p.readModelFromDatabase("temp");
String createTablesSql = p.getCreateTablesSql(db, true, true);
System.out.println(createTablesSql);

} catch (SQLException ex) {
Logger.getLogger(DbTester.class.getName()).log(Level.SEVERE, null, ex);
}

输出是这样的:


-- WISH_LIST


DROP TABLE WISH_LIST;


-- WISH_LIST


CREATE TABLE WISH_LIST ( WISH_ID INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY, ENTRY_DATE TIMESTAMP, WISH_ITEM VARCHAR(32) NOT NULL );

关于database - 以编程方式捕获 Derby 数据库的数据库创建命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com