我在ResultSetMetaData中找到了代码:
case Types.SMALLINT:
if (isUnsigned) {
return "java.lang.Integer";
}
return "java.lang.Integer";
但是在许多文档中,smallint应该映射为short。
答案 0 :(得分:1)
在JDBC 1.0规范中,SMALLINT和TINYINT的映射 被定义为整数。为了向后兼容,他们也在新版本中使用这些转换。
请参阅JDBC规范页187:
注 - 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)