我需要 把 目标数据源中的表 获取到表的字段和字段的类型等信息,然后在目标数据源中创建表,并解析2个不同数据库的表的字段,用Java 创建表

当涉及到将Oracle数据库字段类型映射为MySQL数据库字段类型时,考虑到不同数据库的差异和复杂性,以下是一个更全面的映射示例,涵盖了更多的Oracle字段类型及其可能的MySQL对应类型。

复制代码
import java.util.HashMap;
import java.util.Map;

public class OracleToMySQLTypeConverter {

    private static Map<String, String> typeMapping;

    static {
        typeMapping = new HashMap<>();
        typeMapping.put("NUMBER", "DECIMAL");
        typeMapping.put("VARCHAR2", "VARCHAR");
        typeMapping.put("CHAR", "CHAR");
        typeMapping.put("NCHAR", "CHAR");
        typeMapping.put("NVARCHAR2", "VARCHAR");
        typeMapping.put("DATE", "DATE");
        typeMapping.put("TIMESTAMP", "DATETIME");
        typeMapping.put("CLOB", "TEXT");
        typeMapping.put("NCLOB", "TEXT");
        typeMapping.put("BLOB", "BLOB");
        typeMapping.put("BINARY_DOUBLE", "DOUBLE");
        typeMapping.put("BINARY_FLOAT", "FLOAT");
        typeMapping.put("RAW", "BINARY");
        typeMapping.put("LONG RAW", "BLOB");
        typeMapping.put("LONG", "TEXT");
        typeMapping.put("FLOAT", "FLOAT");
        typeMapping.put("REAL", "REAL");
        typeMapping.put("INTEGER", "INT");
        typeMapping.put("SMALLINT", "SMALLINT");
        typeMapping.put("NUMERIC", "NUMERIC");
        typeMapping.put("BOOLEAN", "BOOLEAN");
        typeMapping.put("VARCHAR", "VARCHAR");
        typeMapping.put("NVARCHAR", "VARCHAR");
        typeMapping.put("VARCHAR2", "VARCHAR");
        typeMapping.put("NCHAR", "CHAR");
        typeMapping.put("CHAR", "CHAR");
        typeMapping.put("LONGVARCHAR", "TEXT");
        typeMapping.put("BINARY", "BINARY");
        typeMapping.put("VARBINARY", "VARBINARY");
        typeMapping.put("LONGVARBINARY", "BLOB");
        typeMapping.put("BLOB", "BLOB");
        typeMapping.put("CLOB", "TEXT");
        typeMapping.put("NCLOB", "TEXT");
        typeMapping.put("ROWID", "VARCHAR");
        // 添加其他类型映射
    }

    public static String convertType(String oracleType) {
        String mysqlType = typeMapping.get(oracleType);
        return mysqlType != null ? mysqlType : "UNKNOWN";
    }

    public static void main(String[] args) {
        String oracleFieldType = "NUMBER";
        String mysqlFieldType = convertType(oracleFieldType);
        System.out.println("Oracle Field Type: " + oracleFieldType);
        System.out.println("MySQL Field Type: " + mysqlFieldType);
    }
}
复制代码

在这个示例中,我添加了更多的类型映射,涵盖了更多的数据类型,包括BOOLEANNUMERICVARBINARYLONGVARBINARY等等。请注意,这只是一个简化的映射,实际情况可能更加复杂。

在实际应用中,你可能还需要考虑类型长度、精度、约束、默认值等方面的映射。如果你的应用需要更全面和精确的类型映射,建议仔细研究Oracle和MySQL数据库的官方文档,以及相关的数据库迁移工具。

 

 

复制代码
private static String mapToOracleDataType(String mysqlDataType) {
// Convert to lowercase for case-insensitive comparison
mysqlDataType = mysqlDataType.toLowerCase();

if (mysqlDataType.startsWith("varchar")) {
// Assuming VARCHAR length is 255 in Oracle
return "VARCHAR2(255)";
} else if (mysqlDataType.startsWith("char")) {
// Assuming CHAR length is 255 in Oracle
return "CHAR(255)";
} else if (mysqlDataType.startsWith("int")) {
return "NUMBER";
} else if (mysqlDataType.startsWith("bigint")) {
return "NUMBER(19)";
} else if (mysqlDataType.startsWith("decimal") || mysqlDataType.startsWith("numeric")) {
// Assuming MySQL DECIMAL/NUMERIC is mapped to Oracle NUMBER(18, 2) for example (18 digits with 2 decimal places)
return "NUMBER(18, 2)";
} else if (mysqlDataType.startsWith("double") || mysqlDataType.startsWith("float")) {
// Assuming MySQL DOUBLE/FLOAT is mapped to Oracle FLOAT
return "FLOAT";
} else if (mysqlDataType.startsWith("tinyint")) {
// Assuming TINYINT(1) is mapped to Oracle NUMBER(1) as it's usually used for boolean values
return "NUMBER(1)";
} else if (mysqlDataType.startsWith("smallint")) {
// Assuming SMALLINT is mapped to Oracle NUMBER(5)
return "NUMBER(5)";
} else if (mysqlDataType.startsWith("date") || mysqlDataType.startsWith("year")) {
return "DATE";
} else if (mysqlDataType.startsWith("time")) {
return "TIMESTAMP";
} else if (mysqlDataType.startsWith("datetime") || mysqlDataType.startsWith("timestamp")) {
return "TIMESTAMP";
} else if (mysqlDataType.startsWith("blob")) {
return "BLOB";
} else if (mysqlDataType.startsWith("text")) {
// Depending on the size requirement, you may need to use CLOB instead
return "CLOB";
} else {
// Default to VARCHAR2 if no specific mapping is found
return "VARCHAR2(255)";
}
}
复制代码

 

posted @   消失的那两年  阅读(35)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示