java - 按需要在 JDBC 中创建的顺序对外键关系进行排序
问题描述
我正在为大学编写一个工具,它应该采用 MySQL 数据库并将其复制到 PostgreSQL 数据库中,反之亦然。
我现在已经阅读了关于 Java 对象的表/列的所有相关信息,现在想开始创建我的创建语句,但是我有一个小问题。
如果一个表使用外键关系引用其他表,则需要在该表之前创建这些其他表,否则 DBMS 将抛出错误。所以我必须以某种方式找到一种方法来对我的表对象进行排序,无论是在我的 Java 代码中还是通过使用巧妙的 SQL 查询。
我尝试在原始表中使用它们的创建顺序:
USE project;
SELECT create_time, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'project';
但是,这只会输出精确到秒的创建时间,如果它们都是使用脚本创建的,这对我没有帮助。
这就是我存储表格的方式:
public Table(String name, Column[] columns, ArrayList<String> primaryKeys, ArrayList<String[]> foreignKeys) {
this.name = name;
this.columns = columns;
this.primaryKeys = primaryKeys;
this.foreignKeys = foreignKeys;
}
外键属性是长度为 3 的字符串数组的 ArrayList,包含具有外键约束的列和引用它的表 + 列。
解决方案
或者,您可以使用它们的主键创建所有表。
然后,您可以使用alter table add constraint
以任何顺序将外键约束添加到表中。
推荐阅读
- laravel - 传递给 App\Http\Controllers\NoticeCommentController::destroy() 的参数 1 必须是 App\NoticeComment 的实例,给定 App\Notice 的实例
- go - 在两个不同的结构上调用相同的函数
- flutter - SharedPreference returning null flutter
- spring-statemachine - How to access StateContext within an interceptor
- angular - Ionic 4 ion-tabs 导航问题:按下后退按钮时,它转到上一个选项卡而不是上一页
- python - 如何检查蛇游戏中的蛇是否穿过食物?
- amazon-web-services - DynamoDB 多个过滤条件,给出错误 - buildTree 错误:未设置参数:ConditionBuilder
- mysql - 计算累计输赢百分比
- c# - jQuery dataTables:基于字符串的过滤器
- c++ - 如何创建一个删除 C 字符串中所有选定字符的函数?