如何在java中比较2种不同的数据库列数据类型

时间:2013-01-24 12:36:11

标签: java

在我的情况下,我必须比较2个不同数据库的列数据类型。 以下是示例代码。

ResultSetMetaData metadataSrc = Src_rs.getMetaData(); // here Src_rs is source resultset
ResultSetMetaData metadataTar= Tar_rs.getMetaData();   // here Tar_rs is target resultset
int countSrc = metadataSrc.getColumnCount();
for (int i = 1; i <= countSrc; i++) {
String srcOracleType=metadataSrc.getColumnTypeName(i);
String tarMySqlType = metadataTar.getColumnTypeName(i);
}

我希望检查srcOracleType是否等于tarMySqlType。如果它一样,我想继续执行,否则需要返回false。

当我尝试在MySQL和Oracle中使用数据类型int创建表时,此查询开始。当我检索两种数据库数据类型时,通过Java Jdbc代码,对于oracle,它给出NUMBER,对于mysql,它给出LONG

2 个答案:

答案 0 :(得分:1)

从API中提取(http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSetMetaData.html):

getColumnTypeName(int column)
     Retrieves the designated column's database-specific type name.

您可以使用:

getColumnClassName(int column)
      Returns the fully-qualified name of the Java class whose instances are manufactured if the method ResultSet.getObject is called to retrieve a value from the column.

通过比较Java中的“转换”而不是比较特定于数据库的行类型会更容易。

答案 1 :(得分:0)

有点晚。

确认源编号和目标编号是否都映射到您的应用程序域中的相同数量。如果它们不匹配,则它们是不可比的。

如果这样做,则需要使用以下规则找到有效的Java类型:

  1. 如果其中之一是整数数据类型(字节,整数,短整数,日志,大整数,布尔值),而另一个是实数数据类型(浮点型/双精度型/大双精度型),则有效的Java sql类型是整数数据类型。
  2. 如果两者均为整数数据类型,则选择范围较小的一个(例如:short的范围小于int的范围)。
  3. 如果两者均为真实数据类型,则选择一个较小范围的数据。

将两个值都转换为有效数据类型(实际上只需要转换一个)并进行比较。