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开发的关系型数据库同步工具,完成关

+
+
#### 版本记录
- 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);
}