diff --git a/README.md b/README.md index b0e4df97d30fbab335a5699a14b5365909b9a1e7..7612d044ade88ea1cfcd1238ca957638f04e0f6c 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ RdbmsSyncTool 关系型数据库同步工具 #### 项目简介: RdbmsSyncTool是使用javaFx开发的关系型数据库同步工具,完成关系型数据库表结构获取,快捷执行一些常用数据库脚本,支持多种类型数据库直接数据转移,同步。 -目前支持的数据库类型有mysql、Oracle、sqlserver、PostgreSql、达梦、sqlite、h2、access、db2等。 +目前支持的数据库类型有mysql、Oracle、sqlserver、PostgreSql、达梦、sqlite、h2、access、db2、人大金仓等。 -**xJavaFxTool交流QQ群:== [387473650](https://jq.qq.com/?_wv=1027&k=59UDEAD) ==** +**xJavaFxTool交流QQ群:== [387473650(此群已满)](https://jq.qq.com/?_wv=1027&k=59UDEAD) 请加群②[1104780992](https://jq.qq.com/?_wv=1027&k=bhAdkju9) ==** #### 环境搭建说明: - 开发环境为jdk1.8,基于maven构建 @@ -16,6 +16,8 @@ RdbmsSyncTool是使用javaFx开发的关系型数据库同步工具,完成关 ![数据库同步工具.png](images/数据库同步工具.png) +![数据库同步工具演示.gif](images/数据库同步工具演示.gif) + #### 版本记录 - 0.0.1 20200419 1. 完成基本功能配置(对表进行查询、删除、建表语句、同步数据等操作) @@ -28,3 +30,5 @@ RdbmsSyncTool是使用javaFx开发的关系型数据库同步工具,完成关 2. 添加表名过滤正则支持 3. 添加时间和主键过滤条件支持 4. 添加db2数据库支持 +- 0.0.4 + 1. 添加人大金仓数据库支持 diff --git "a/images/\346\225\260\346\215\256\345\272\223\345\220\214\346\255\245\345\267\245\345\205\267\346\274\224\347\244\272.gif" "b/images/\346\225\260\346\215\256\345\272\223\345\220\214\346\255\245\345\267\245\345\205\267\346\274\224\347\244\272.gif" new file mode 100644 index 0000000000000000000000000000000000000000..5749b16f2e6fd1e71a35c928464a60b4edbd533d Binary files /dev/null and "b/images/\346\225\260\346\215\256\345\272\223\345\220\214\346\255\245\345\267\245\345\205\267\346\274\224\347\244\272.gif" differ diff --git a/libs/kingbase8-8.2.0.jar b/libs/kingbase8-8.2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..390ae266691b6e2aef393a63740ed851b6b1cf62 Binary files /dev/null and b/libs/kingbase8-8.2.0.jar differ diff --git a/pom.xml b/pom.xml index 22295e93a35c7942017fd701e6ae2478e325b50f..9abe6fbfa71e1e7a874dd06a1f6f5b168e670fd1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.xwintop x-RdbmsSyncTool - 0.0.3 + 0.0.4 jar x-RdbmsSyncTool @@ -129,6 +129,14 @@ ${project.basedir}/libs/DmJdbcDriver18.jar + + com.kingbase + kingbase8 + 8.2.0 + system + ${project.basedir}/libs/kingbase8-8.2.0.jar + + org.springframework spring-jdbc diff --git a/src/main/java/com/xwintop/xJavaFxTool/controller/debugTools/RdbmsSyncToolController.java b/src/main/java/com/xwintop/xJavaFxTool/controller/debugTools/RdbmsSyncToolController.java index 9b847f759439297481626eea42cbffd072fcbab0..b540c59c28e6ad5a986de6d3874bf7446c3b8928 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/controller/debugTools/RdbmsSyncToolController.java +++ b/src/main/java/com/xwintop/xJavaFxTool/controller/debugTools/RdbmsSyncToolController.java @@ -32,7 +32,7 @@ public class RdbmsSyncToolController extends RdbmsSyncToolView { private RdbmsSyncToolService entDataToolService = new RdbmsSyncToolService(this); private TextFieldInputHistoryDialog textFieldInputHistoryDialog = new TextFieldInputHistoryDialog("./javaFxConfigure/dbUrlDocumentConfigure.yml", "host", "port", "dbName", "dbType", "userName", "password", "jdbcUrl", "schema"); private ContextMenu contextMenu = new ContextMenu(); - private String[] dbTypeStrings = new String[]{"mysql", "oracle", "oracleSid", "postgresql", "sqlserver", "sqlserverold", "dm", "sqlite", "h2Embedded", "h2Server", "access", "db2"}; + private String[] dbTypeStrings = new String[]{"mysql", "oracle", "oracleSid", "postgresql", "sqlserver", "sqlserverold", "dm", "sqlite", "h2Embedded", "h2Server", "access", "db2", "kingbase"}; private String[] outputPathStrings = new String[]{"./executor"}; private String[] tableTypeStrings = new String[]{"TABLE+VIEW", "TABLE", "VIEW", "SYSTEM_TABLE", "GLOBAL_TEMPORARY", "LOCAL_TEMPORARY", "ALIAS", "SYNONYM"}; private String[] dataSourceTypeStrings = new String[]{"Druid", "Driver", "Simple", "Hikari"}; @@ -103,6 +103,8 @@ public class RdbmsSyncToolController extends RdbmsSyncToolView { private void addTableTreeViewMouseClicked(TreeView tableTreeView) { tableTreeView.setOnMouseClicked(event -> { + contextMenu.hide(); + contextMenu.getItems().clear(); TreeItem selectedItem = tableTreeView.getSelectionModel().getSelectedItem(); if (selectedItem == null) { return; @@ -110,24 +112,20 @@ public class RdbmsSyncToolController extends RdbmsSyncToolView { if (event.getButton() == MouseButton.PRIMARY) { selectedItem.setExpanded(!selectedItem.isExpanded()); } else if (event.getButton() == MouseButton.SECONDARY) { - MenuItem menu_UnfoldAll = new MenuItem("展开所有"); - menu_UnfoldAll.setOnAction(event1 -> { + JavaFxViewUtil.addMenuItem(contextMenu, "展开所有", event1 -> { tableTreeView.getRoot().setExpanded(true); tableTreeView.getRoot().getChildren().forEach(stringTreeItem -> { stringTreeItem.setExpanded(true); }); }); - MenuItem menu_FoldAll = new MenuItem("折叠所有"); - menu_FoldAll.setOnAction(event1 -> { + JavaFxViewUtil.addMenuItem(contextMenu, "折叠所有", event1 -> { tableTreeView.getRoot().getChildren().forEach(stringTreeItem -> { stringTreeItem.setExpanded(false); }); }); - MenuItem menu_executeSql = new MenuItem("执行Sql"); - menu_executeSql.setOnAction(event1 -> { + JavaFxViewUtil.addMenuItem(contextMenu, "执行Sql", event1 -> { entDataToolService.executeSql(tableTreeView); }); - ContextMenu contextMenu = new ContextMenu(menu_UnfoldAll, menu_FoldAll, menu_executeSql); if ("源端库表".equals(selectedItem.getValue()) || "目标端库表".equals(selectedItem.getValue())) { JavaFxViewUtil.addMenuItem(contextMenu, "一键复制表名", event1 -> { String tableNames = String.join(",", RdbmsSyncToolService.getSelectNameList(selectedItem)); @@ -213,8 +211,7 @@ public class RdbmsSyncToolController extends RdbmsSyncToolView { }); } } - - tableTreeView.setContextMenu(contextMenu); + contextMenu.show(tableTreeView, null, event.getX(), event.getY()); } }); } diff --git a/src/main/java/com/xwintop/xJavaFxTool/tools/DataxJsonUtil.java b/src/main/java/com/xwintop/xJavaFxTool/tools/DataxJsonUtil.java index ea39e87758acf9e494bc385ff2cda5652c212c46..4835e13c3bc61963a83f6df20d372c76e842dd09 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/tools/DataxJsonUtil.java +++ b/src/main/java/com/xwintop/xJavaFxTool/tools/DataxJsonUtil.java @@ -27,6 +27,8 @@ public class DataxJsonUtil { return "9092"; } else if ("db2".equalsIgnoreCase(DB_TYPE)) { return "50000"; + } else if ("kingbase".equalsIgnoreCase(DB_TYPE)) { + return "54321"; } return null; } @@ -66,6 +68,8 @@ public class DataxJsonUtil { jdbcUrl = String.format("jdbc:ucanaccess://%s", dbName); } else if ("db2".equalsIgnoreCase(DB_TYPE)) { jdbcUrl = String.format("jdbc:db2://%s:%s/%s", dbIp, dbPort, dbName); + } else if ("kingbase".equalsIgnoreCase(DB_TYPE)) { + jdbcUrl = String.format("jdbc:kingbase8://%s:%s/%s", dbIp, dbPort, dbName); } log.info("解析出jdbcUrl: " + jdbcUrl); return jdbcUrl; @@ -90,6 +94,8 @@ public class DataxJsonUtil { dbUser = StringUtils.defaultIfBlank(schema, userName).toUpperCase(); } else if ("h2Server".equals(type)) { dbUser = StringUtils.defaultIfBlank(schema, "PUBLIC"); + } else if ("kingbase".equals(type)) { + dbUser = StringUtils.defaultIfBlank(schema, "PUBLIC"); } else { dbUser = StringUtils.defaultIfBlank(schema, userName); } diff --git a/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java b/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java index 606739b47e1ded6ca5731c70d1811a500a67abaa..da76c37f657e1919e8c7d3f4865a1bf175a5a33f 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java +++ b/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java @@ -34,6 +34,8 @@ public class SqlUtil { dataSource.setUrl(DataxJsonUtil.getJdbcUrl(jdbcUrl, dbType, dbIp, dbPort, dbName)); if ("access".equals(dbType)) { dataSource.setDriverClassName("net.ucanaccess.jdbc.UcanaccessDriver"); + } else if ("kingbase".equals(dbType)) { + dataSource.setDriverClassName("com.kingbase8.Driver"); } dataSource.setUsername(dbUserName); dataSource.setPassword(dbUserPassword); @@ -62,6 +64,8 @@ public class SqlUtil { try { if ("access".equals(dbType)) { driver = "net.ucanaccess.jdbc.UcanaccessDriver"; + } else if ("kingbase".equals(dbType)) { + driver = "com.kingbase8.Driver"; } else { driver = JdbcUtils.getDriverClassName(jdbcUrl); }