AE86 5 år sedan
förälder
incheckning
99ea6e90f8

+ 14 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -319,6 +319,14 @@ public abstract class AbstractDatabaseConnector implements Database {
         return metaInfo;
     }
 
+    /**
+     * 查询语句表名和字段带上引号(默认不加)
+     * @return
+     */
+    protected String buildSqlWithQuotation(){
+        return "";
+    }
+
     /**
      * 获取查询SQL
      *
@@ -360,7 +368,9 @@ public abstract class AbstractDatabaseConnector implements Database {
             logger.error("Table name can not be empty.");
             throw new ConnectorException("Table name can not be empty.");
         }
-        return SqlBuilderEnum.getSqlBuilder(type).buildSql(tableName, pk, filedNames, queryFilterSQL, this);
+
+        String quotation = buildSqlWithQuotation();
+        return SqlBuilderEnum.getSqlBuilder(type).buildSql(tableName, pk, filedNames, queryFilterSQL, quotation, this);
     }
 
     /**
@@ -417,10 +427,11 @@ public abstract class AbstractDatabaseConnector implements Database {
         StringBuilder sql = new StringBuilder();
         sql.append("(");
         Filter c = null;
+        String quotation = buildSqlWithQuotation();
         for (int i = 0; i < size; i++) {
             c = list.get(i);
-            // USER = 'zhangsan'
-            sql.append(c.getName()).append(c.getFilter()).append("'").append(c.getValue()).append("'");
+            // "USER" = 'zhangsan'
+            sql.append(quotation).append(c.getName()).append(quotation).append(c.getFilter()).append("'").append(c.getValue()).append("'");
             if (i < end) {
                 sql.append(" ").append(queryOperator).append(" ");
             }

+ 2 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilder.java

@@ -19,9 +19,10 @@ public interface SqlBuilder {
      * @param pk
      * @param filedNames
      * @param queryFilter
+     * @param quotation
      * @param database
      * @return
      */
-    String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, Database database);
+    String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, String quotation, Database database);
 
 }

+ 3 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilderDelete.java

@@ -18,13 +18,13 @@ public class SqlBuilderDelete implements SqlBuilder {
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     @Override
-    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, Database database) {
+    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, String quotation, Database database) {
         if(StringUtils.isBlank(pk)){
             logger.error("Table primary key can not be empty.");
             throw new ConnectorException("Table primary key can not be empty.");
         }
-        // DELETE FROM USER WHERE USER.ID=?
-        return new StringBuilder().append("DELETE FROM ").append(tableName).append(" WHERE ").append(tableName).append(".").append(pk)
+        // DELETE FROM "USER" WHERE "ID"=?
+        return new StringBuilder().append("DELETE FROM ").append(quotation).append(tableName).append(quotation).append(" WHERE ").append(quotation).append(pk).append(quotation)
                 .append("=?").toString();
     }
 

+ 5 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilderInsert.java

@@ -12,15 +12,15 @@ import java.util.List;
 public class SqlBuilderInsert implements SqlBuilder {
 
     @Override
-    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, Database database) {
+    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, String quotation, Database database) {
         StringBuilder sql = new StringBuilder();
         StringBuilder fs = new StringBuilder();
         StringBuilder vs = new StringBuilder();
         int size = filedNames.size();
         int end = size - 1;
         for (int i = 0; i < size; i++) {
-            // USER.USERNAME
-            fs.append(tableName).append(".").append(filedNames.get(i));
+            // "USERNAME"
+            fs.append(quotation).append(filedNames.get(i)).append(quotation);
             vs.append("?");
             //如果不是最后一个字段
             if (i < end) {
@@ -28,8 +28,8 @@ public class SqlBuilderInsert implements SqlBuilder {
                 vs.append(", ");
             }
         }
-        // INSERT INTO USER(USER.USERNAME,USER.AGE) VALUES (?,?)
-        sql.insert(0, "INSERT INTO ").append(tableName).append("(").append(fs).append(") VALUES (").append(vs).append(")");
+        // INSERT INTO "USER"("USERNAME","AGE") VALUES (?,?)
+        sql.insert(0, "INSERT INTO ").append(quotation).append(tableName).append(quotation).append("(").append(fs).append(") VALUES (").append(vs).append(")");
         return sql.toString();
     }
 

+ 5 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilderQuery.java

@@ -15,20 +15,20 @@ import java.util.List;
 public class SqlBuilderQuery implements SqlBuilder {
 
     @Override
-    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, Database database) {
+    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, String quotation, Database database) {
         StringBuilder sql = new StringBuilder();
         int size = filedNames.size();
         int end = size - 1;
         for (int i = 0; i < size; i++) {
-            // USER.USERNAME
-            sql.append(tableName).append(".").append(filedNames.get(i));
+            // "USERNAME"
+            sql.append(quotation).append(filedNames.get(i)).append(quotation);
             //如果不是最后一个字段
             if (i < end) {
                 sql.append(", ");
             }
         }
-        // SELECT USER.ID,USER.NAME FROM USER
-        sql.insert(0, "SELECT ").append(" FROM ").append(tableName);
+        // SELECT "ID","NAME" FROM "USER"
+        sql.insert(0, "SELECT ").append(" FROM ").append(quotation).append(tableName).append(quotation);
         // 解析查询条件
         if (StringUtils.isNotBlank(queryFilter)) {
             sql.append(queryFilter);

+ 6 - 6
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilderUpdate.java

@@ -18,7 +18,7 @@ public class SqlBuilderUpdate implements SqlBuilder {
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     @Override
-    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, Database database) {
+    public String buildSql(String tableName, String pk, List<String> filedNames, String queryFilter, String quotation, Database database) {
         if(StringUtils.isBlank(pk)){
             logger.error("Table primary key can not be empty.");
             throw new ConnectorException("Table primary key can not be empty.");
@@ -26,17 +26,17 @@ public class SqlBuilderUpdate implements SqlBuilder {
         StringBuilder sql = new StringBuilder();
         int size = filedNames.size();
         int end = size - 1;
-        sql.append("UPDATE ").append(tableName).append(" SET ");
+        sql.append("UPDATE ").append(quotation).append(tableName).append(quotation).append(" SET ");
         for (int i = 0; i < size; i++) {
-            // USER.USERNAME=?
-            sql.append(tableName).append(".").append(filedNames.get(i)).append("=?");
+            // "USERNAME"=?
+            sql.append(quotation).append(filedNames.get(i)).append(quotation).append("=?");
             //如果不是最后一个字段
             if (i < end) {
                 sql.append(",");
             }
         }
-        // UPDATE USER SET USER.USERNAME=?,USER.AGE=?, WHERE USER.ID=?
-        sql.append(" WHERE ").append(tableName).append(".").append(pk).append("=?");
+        // UPDATE "USER" SET "USERNAME"=?,"AGE"=? WHERE "ID"=?
+        sql.append(" WHERE ").append(quotation).append(pk).append(quotation).append("=?");
         return sql.toString();
     }
 

+ 4 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/oracle/OracleConnector.java

@@ -33,4 +33,8 @@ public final class OracleConnector extends AbstractDatabaseConnector {
         return new Object[]{pageIndex * pageSize, (pageIndex - 1) * pageSize};
     }
 
+    @Override
+    protected String buildSqlWithQuotation(){
+        return "\"";
+    }
 }

+ 6 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLOracleConnector.java

@@ -45,4 +45,10 @@ public final class DQLOracleConnector extends AbstractDatabaseConnector {
     public MetaInfo getMetaInfo(ConnectorConfig config, String tableName) {
         return super.getDqlMetaInfo(config);
     }
+
+    @Override
+    protected String buildSqlWithQuotation(){
+        return "\"";
+    }
+
 }

+ 0 - 1
dbsyncer-listener/src/main/java/org/dbsyncer/listener/oracle/dcn/DBChangeNotification.java

@@ -13,7 +13,6 @@ import org.slf4j.LoggerFactory;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.util.*;