【问题标题】:How to get database specific datatypes in java?如何在java中获取数据库特定的数据类型?
【发布时间】:2012-03-06 09:06:03
【问题描述】:

考虑这段代码

Class.forName ("oracle.jdbc.OracleDriver");

          connection = DriverManager.getConnection
             ("jdbc:oracle:thin:@//XXX.XXX.XXX.XXX:1521/xe", "abc", "def");
 DatabaseMetaData metaData=connection.getMetaData();
        ResultSet rsc= metaData.getColumns(null, "MYSCHEMA", "MYTABLE", null);
        while (rsc.next()){

            System.out.println(rsc.getString("COLUMN_NAME").toUpperCase());
            System.out.println(rsc.getString("TYPE_NAME").toUpperCase());
            System.out.println(rsc.getInt("COLUMN_SIZE"));
            System.out.println(rsc.getInt("DECIMAL_DIGITS"));   
            System.out.println(rsc.getString("IS_NULLABLE").toUpperCase()) ;
            System.out.println(rsc.getInt("ORDINAL_POSITION"));
            System.out.println(rsc.getInt("DATA_TYPE"));
            System.out.println("********************************************");
        }

通过这个代码段,我可以知道,如果假设 MYTABLE 有一个列,其名称是 Oracle 中类型为 NUMBER 的 MYTABLEID,那么我如何知道在 Mysql 或 PostGresql 中对应的 NUMBER 等价数据类型名称是什么?主要目的是获取数据库特定的数据类型。就像在 Oracle 中一样,我们有 CLOB 数据类型,但在 postgresql 中,我们有 bytea 作为等效的数据类型。我想要特定于数据库的类型,以便我可以创建 DDL(创建表语句)以在特定数据库中创建表(从 oracle 到 mysql 或 postgresql 等)。

【问题讨论】:

  • 我认为您必须在代码中手动映射这些数据类型
  • @MozenRath 手动?天啊。然后我肯定会邀请错误.. :(
  • 你想达到什么目的?为什么不使用rsc.getObject 并对结果对象进行instanceof 检查?
  • @Jonathan 我想准备问题中提到的创建表查询.. rsc.getObject() 不会有用对..假设您必须将客户表从 oracle 复制到 mysql,那么如何你这样做..mysql的数据类型与oracle不同..对..
  • 您是否考虑过使用 orm (hibernate/eclipselink) 框架 - 如果不是用于数据访问,至少是用于模式创建?

标签: java database ddl


【解决方案1】:

我将创建一个 XML 文件,其中包含有关每个数据库和任何特定数据库数据类型(例如 CLOB 或 bytea)的信息,然后我将使用此信息并检索它以用于您在代码中可能具有的任何特定用途。希望对您有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-06-16
  • 2015-05-02
  • 2021-10-25
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多