【发布时间】:2018-12-17 21:38:57
【问题描述】:
MySql tinyint 在 java 中返回为 BIT,列大小返回为 null。对于其他数据类型,它工作正常。有什么解决办法吗?
Class clsObj = Class.forName(className);
AbstractEntityPersister classMetadata = (AbstractEntityPersister) getSessionFactory().getClassMetadata(clsObj);
String[] properties = classMetadata.getPropertyNames();
String tableName = classMetadata.getTableName();
Map<String, String> dbFieldToPojoFieldMap = new HashMap<String, String>();
for (String prop : properties) {
String[] names = classMetadata.getPropertyColumnNames(prop);
dbFieldToPojoFieldMap.put(names[0], prop);
}
DatabaseMetaData meta = con.getMetaData();
ResultSet rsColumns = meta.getColumns(null, null, tableName, null);
while (rsColumns.next()) {
Map<String, String> columnMetaData = new HashMap<String, String>();
String columnName = rsColumns.getString(Constants.COLUMN_NAME);
String columnType = rsColumns.getString(Constants.TYPE_NAME);
String columnSize = rsColumns.getString(Constants.COLUMN_SIZE);
String decimalDigits = rsColumns.getString(Constants.DECIMAL_DIGITS);
}
【问题讨论】:
-
我无法用 mysql-connector-java-5.1.46 重现您的问题。对我来说,
.getColumns分别返回TINYINT、3和0对应TYPE_NAME、COLUMN_SIZE和DECIMAL_DIGITS。能否提供minimal reproducible example以及具体的版本信息(驱动版本、服务器版本等)? -
什么是 MySQL 版本?您使用的是什么 JDBC 驱动程序?