【发布时间】: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) 框架 - 如果不是用于数据访问,至少是用于模式创建?