diff --git a/README.md b/README.md index 7612d044ade88ea1cfcd1238ca957638f04e0f6c..9399edf2b2ef384485c96faafdb733f30a57a74d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ RdbmsSyncTool是使用javaFx开发的关系型数据库同步工具,完成关 **xJavaFxTool交流QQ群:== [387473650(此群已满)](https://jq.qq.com/?_wv=1027&k=59UDEAD) 请加群②[1104780992](https://jq.qq.com/?_wv=1027&k=bhAdkju9) ==** #### 环境搭建说明: -- 开发环境为jdk1.8,基于maven构建 +- 开发环境为jdk17,基于maven构建 - 使用eclipase或Intellij Idea开发(推荐使用[Intellij Idea](https://www.jetbrains.com/?from=xJavaFxTool)) - 该项目为javaFx开发的实用小工具集[xJavaFxTool](https://gitee.com/xwintop/xJavaFxTool)的插件。 - 本项目使用了[lombok](https://projectlombok.org/),在查看本项目时如果您没有下载lombok 插件,请先安装,不然找不到get/set等方法 diff --git a/pom.xml b/pom.xml index 9abe6fbfa71e1e7a874dd06a1f6f5b168e670fd1..ae00797b533c888c7921dbad837302772dd39f1d 100644 --- a/pom.xml +++ b/pom.xml @@ -19,19 +19,8 @@ http://maven.aliyun.com/nexus/content/groups/public/ - xwintop-maven - https://xwintop.gitee.io/maven/repository - - - spring-snapshots - http://repo.spring.io/snapshot - - true - - - - spring-milestones - http://repo.spring.io/milestone + jitpack.io + https://jitpack.io @@ -43,37 +32,37 @@ test - com.xwintop + com.gitee.xwintop xcore - 0.0.6 + 0.0.7 org.projectlombok lombok - 1.18.6 + 1.18.22 provided com.alibaba druid - 1.1.24 + 1.2.10 mysql mysql-connector-java - 5.1.48 + 5.1.49 - cn.easyproject - ojdbc7 - 12.1.0.2.0 + com.oracle.database.jdbc + ojdbc8 + 19.8.0.0 @@ -91,7 +80,7 @@ org.postgresql postgresql - 42.2.12 + 42.2.24 diff --git a/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolApplication.java b/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..fd1875a4ce9f9cce89d41e0217b150a6c2731112 --- /dev/null +++ b/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolApplication.java @@ -0,0 +1,43 @@ +package com.xwintop.xJavaFxTool; + +import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; +import javafx.application.Application; +import javafx.event.EventHandler; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import javafx.stage.WindowEvent; +import lombok.extern.slf4j.Slf4j; + +import java.net.URL; +import java.util.ResourceBundle; + +@Slf4j +public class RdbmsSyncToolApplication extends Application { + @Override + public void start(Stage primaryStage) throws Exception { + double[] screenSize = JavaFxSystemUtil.getScreenSizeByScale(0.74, 0.8); + FXMLLoader fXMLLoader = RdbmsSyncToolApplication.getFXMLLoader(); + ResourceBundle resourceBundle = fXMLLoader.getResources(); + Parent root = fXMLLoader.load(); + primaryStage.setResizable(true); + primaryStage.setTitle(resourceBundle.getString("Title")); +// primaryStage.getIcons().add(new Image("/images/icon.jpg")); + primaryStage.setScene(new Scene(root, screenSize[0], screenSize[1])); + primaryStage.show(); + primaryStage.setOnCloseRequest(new EventHandler() { + @Override + public void handle(WindowEvent event) { + System.exit(0); + } + }); + } + + public static FXMLLoader getFXMLLoader() { + ResourceBundle resourceBundle = ResourceBundle.getBundle("locale.RdbmsSyncTool"); + URL url = RdbmsSyncToolApplication.class.getResource("/com/xwintop/xJavaFxTool/fxmlView/debugTools/RdbmsSyncTool.fxml"); + FXMLLoader fXMLLoader = new FXMLLoader(url, resourceBundle); + return fXMLLoader; + } +} diff --git a/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolMain.java b/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolMain.java index 50a18edde7d5c015a7b0b310611679efa1a91883..e9f2346518ad9b0cf389bd1b63c4c9389fb3cbdb 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolMain.java +++ b/src/main/java/com/xwintop/xJavaFxTool/RdbmsSyncToolMain.java @@ -1,51 +1,15 @@ package com.xwintop.xJavaFxTool; -import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; import javafx.application.Application; -import javafx.event.EventHandler; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.stage.Stage; -import javafx.stage.WindowEvent; import lombok.extern.slf4j.Slf4j; -import java.net.URL; -import java.util.ResourceBundle; - @Slf4j -public class RdbmsSyncToolMain extends Application { +public class RdbmsSyncToolMain { public static void main(String[] args) { try { - launch(args); + Application.launch(RdbmsSyncToolApplication.class, args); } catch (Exception e) { e.printStackTrace(); } } - - @Override - public void start(Stage primaryStage) throws Exception { - double[] screenSize = JavaFxSystemUtil.getScreenSizeByScale(0.74, 0.8); - FXMLLoader fXMLLoader = RdbmsSyncToolMain.getFXMLLoader(); - ResourceBundle resourceBundle = fXMLLoader.getResources(); - Parent root = fXMLLoader.load(); - primaryStage.setResizable(true); - primaryStage.setTitle(resourceBundle.getString("Title")); -// primaryStage.getIcons().add(new Image("/images/icon.jpg")); - primaryStage.setScene(new Scene(root, screenSize[0], screenSize[1])); - primaryStage.show(); - primaryStage.setOnCloseRequest(new EventHandler() { - @Override - public void handle(WindowEvent event) { - System.exit(0); - } - }); - } - - public static FXMLLoader getFXMLLoader() { - ResourceBundle resourceBundle = ResourceBundle.getBundle("locale.RdbmsSyncTool"); - URL url = Object.class.getResource("/com/xwintop/xJavaFxTool/fxmlView/debugTools/RdbmsSyncTool.fxml"); - FXMLLoader fXMLLoader = new FXMLLoader(url, resourceBundle); - return fXMLLoader; - } } diff --git a/src/main/java/com/xwintop/xJavaFxTool/services/debugTools/RdbmsSyncToolService.java b/src/main/java/com/xwintop/xJavaFxTool/services/debugTools/RdbmsSyncToolService.java index b175f73b100d3f23efc6e5d206f4fe64fd720f41..2c85438ad9c2b2faebfec43a1dec4548730dcf6e 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/services/debugTools/RdbmsSyncToolService.java +++ b/src/main/java/com/xwintop/xJavaFxTool/services/debugTools/RdbmsSyncToolService.java @@ -5,6 +5,7 @@ import cn.hutool.db.meta.Column; import cn.hutool.db.meta.MetaUtil; import cn.hutool.db.meta.Table; import cn.hutool.db.meta.TableType; +import com.alibaba.druid.DbType; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.JdbcUtils; import com.xwintop.xJavaFxTool.controller.debugTools.RdbmsSyncToolController; @@ -71,7 +72,7 @@ public class RdbmsSyncToolService { } Connection connection = dataSource.getConnection(); try { - tableNames = JdbcUtils.showTables(connection, dbType); + tableNames = JdbcUtils.showTables(connection, DbType.of(dbType)); } finally { JdbcUtils.close(connection); } @@ -369,6 +370,18 @@ public class RdbmsSyncToolService { for (int i = 0; i < columnList2.length; i++) { dataObjects[i] = rs.getObject(i + 1); switch (rsMetaData.getColumnType(i + 1)) { + case Types.CHAR: + case Types.NCHAR: + case Types.VARCHAR: + case Types.LONGVARCHAR: + case Types.NVARCHAR: + case Types.LONGNVARCHAR: + dataObjects[i] = rs.getString(i + 1); + break; + case Types.CLOB: + case Types.NCLOB: + dataObjects[i] = rs.getString(i + 1); + break; case Types.TIME: dataObjects[i] = rs.getTime(i + 1); break; @@ -382,6 +395,13 @@ public class RdbmsSyncToolService { case Types.TIMESTAMP: dataObjects[i] = rs.getTimestamp(i + 1); break; + case Types.BINARY: + case Types.VARBINARY: + case Types.BLOB: + case Types.LONGVARBINARY: + byte[] value = rs.getBytes(i + 1); + dataObjects[i] = value == null ? null : new String(value); + break; default: dataObjects[i] = rs.getObject(i + 1); } diff --git a/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java b/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java index da76c37f657e1919e8c7d3f4865a1bf175a5a33f..21ecc4385347394ec39b9e5c225b2b9c21a4bfe6 100644 --- a/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java +++ b/src/main/java/com/xwintop/xJavaFxTool/tools/SqlUtil.java @@ -211,7 +211,7 @@ public class SqlUtil { if ("sqlserver".equalsIgnoreCase(DB_TYPE)) { stringBuffer.append(" > CONVERT(datetime,'" + DateFormatUtils.format(lastSyncTime, "yyyy-MM-dd HH:mm:ss.SSS") + "',21) and "); stringBuffer.append(filterTimeColumn).append(" <= CONVERT(datetime,'" + DateFormatUtils.format(maxLastupdate, "yyyy-MM-dd HH:mm:ss.SSS") + "',21)"); - } else if ("oracle".equalsIgnoreCase(DB_TYPE)) { + } else if ("oracle".equalsIgnoreCase(DB_TYPE) || "dm".equalsIgnoreCase(DB_TYPE)) { stringBuffer.append(" > TO_TIMESTAMP('" + DateFormatUtils.format(lastSyncTime, "yyyy-MM-dd-HH:mm:ss") + String.format(".%09d", lastSyncTime.getNanos()) + "','yyyy-MM-dd-hh24:mi:ss.ff9') and "); stringBuffer.append(filterTimeColumn).append(" <= TO_TIMESTAMP('" + DateFormatUtils.format(maxLastupdate, "yyyy-MM-dd-HH:mm:ss") + String.format(".%09d", maxLastupdate.getNanos()) + "','yyyy-MM-dd-hh24:mi:ss.ff9')"); } else if ("mysql".equalsIgnoreCase(DB_TYPE)) {