为什么mysql jdbc驱动映射mysql类型smallint为int?

时间:2015-07-29 07:34:56

标签: mysql

我在ResultSetMetaData中找到了代码:

case Types.SMALLINT:
if (isUnsigned) {
    return "java.lang.Integer";
}
return "java.lang.Integer";

但是在许多文档中,smallint应该映射为short。

1 个答案:

答案 0 :(得分:1)

在JDBC 1.0规范中,SMALLINT和TINYINT的映射 被定义为整数。为了向后兼容,他们也在新版本中使用这些转换。

请参阅JDBC规范页187:

http://download.oracle.com/otn-pub/jcp/jdbc-4_1-mrel-spec/jdbc4.1-fr-spec.pdf?AuthParam=1438159353_fad6114e3a27f1770c1a955db13718c2

  

注 - JDBC 1.0规范定义了Java对象映射   SMALLINT和TINYINT JDBC类型为Integer。 Java语言   在JDBC 1.0中没有包含Byte和Short数据类型   规范最终确定。 SMALLINT和TINYINT的映射到   维护整数以保持向后兼容性

MySQL jdbc开发人员遵循jdbc规范并实现了从SMALLINT到Integer的对话。

您还可以在mysql doucmentation中看到从smallint到int的转换。

  

ResultSet.getObject()方法使用之间的类型转换   MySQL和Java类型,遵循JDBC规范所在   合适的。

见表:

  

表5.2 ResultSet.getObject()的Java类型的MySQL类型

MySQL类型名称 GetColumnClassName的返回值 作为Java类返回
SMALLINT [(M)] [UNSIGNED] SMALLINT [UNSIGNED] java.lang.Integer(无论是否为UNSIGNED)