首页 > 解决方案 > Tinyint returning as BIT in DatabaseMetaData JAVA

问题描述

MySql tinyint is returning as BIT in java and column size is returning as null. For other data types, it is working fine. Any Solution for this?

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);
}

标签: javamysqlhibernatejdbc

解决方案


我们遇到了类似的问题。看起来较新版本的 MySQL(即 5.0.6 后,如 8)定义了一个BIT列类型,它是TINYINT(1). 此外,BOOLBOOLEAN已介绍。为了为我们解决这个问题,我们决定使用 java 连接字符串选项"tinyInt1isBit=false"来正确报告我们正确定义的TINYINT列。我们不使用BIT. 希望这可以帮助。


推荐阅读