java 数据库字段抽取遇到的坑
一个字段设置成了无符号类型 " BIGINT UNSIGNED",(原来同事设置了一个字段是无符号的,我之前都是用的有符号的)
// 字段长度
Integer fieldLength = Integer.valueOf(rs.getString("COLUMN_SIZE"));
// 字段类型
String dbType = rs.getString("TYPE_NAME");
if (dbType.contains(" UNSIGNED")) {undefined
// 无符号
dbType = dbType.replace(" UNSIGNED", "");
} else {undefined
// 有符号
if (isNumberType(dbType)) {undefined
// 数字类型
fieldLength = fieldLength + 1;
}
}
java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT-->JDBC的BIGINT。
而每个JDBC类型,都有默认的Java类型与之对应,即ResultSet.getObject()返回Object的具体类型,如JDBC的BIGINT-->Java的java.lang.Long;JDBC的BIGINT UNSIGNED-->Java的 java.math.BigInteger。
我们可以通过ResultSet.getMetaData().getColumnTypeName(columnIndex)获取字段的JDBC类型,通过ResultSet.getMetaData().getColumnClassName(columnIndex)获取字段的Java类型。
主键和无符号会补个0,就是20
mysql5及之前的版本使用的是旧版驱动"com.mysql.jdbc.Driver",
mysql6以及之后的版本需要更新到新版驱动,对应的Driver是"com.mysql.cj.jdbc.Driver"