All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.test4j.module.database.environment.TableMeta Maven / Gradle / Ivy

package org.test4j.module.database.environment;

import java.sql.ResultSetMetaData;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TableMeta {
    /**
     * 表名
     */
    String                  tableName;

    Map columns;

    public TableMeta(String table, ResultSetMetaData meta, DBEnvironment dbEnvironment) throws Exception {
        this.tableName = table;
        this.columns = new HashMap();
        int count = meta.getColumnCount();
        for (int index = 1; index <= count; index++) {
            ColumnMeta columnMeta = new ColumnMeta();

            columnMeta.columnName = meta.getColumnName(index);
            columnMeta.size = meta.getColumnDisplaySize(index);
            columnMeta.typeName = meta.getColumnTypeName(index);
            columnMeta.isNullable = meta.isNullable(index) == 1;

            columnMeta.javaType = meta.getColumnClassName(index);// dbEnvironment.getJavaClass(columnMeta.typeName);

            this.columns.put(columnMeta.columnName, columnMeta);
        }
    }

    public Map getColumns() {
        return columns;
    }

    /**
     * 将string转换为对应的java对象
     * 
     * @param input
     * @param type
     * @return
     */
    public String getColumnType(String column) {
        ColumnMeta meta = this.getColumns().get(column);
        if (meta == null) {
            throw new RuntimeException("can't find column[" + column + "] field in table[" + tableName + "].");
        }

        return meta.javaType;
    }

    /**
     * 返回字段的长度
     * 
     * @param column
     * @return
     */
    public int getCloumnSize(String column) {
        ColumnMeta meta = this.getColumns().get(column);
        if (meta == null) {
            throw new RuntimeException("can't find column[" + column + "] field in table[" + tableName + "].");
        }

        return meta.size;
    }

    /**
     * 根据数据库字段的最大长度,截断插入的值
     * 
     * @param column
     * @param input
     * @return
     */
    public String truncateString(String column, String input) {
        if (input == null) {
            return null;
        }
        int size = this.getCloumnSize(column);
        if (size > input.length()) {
            return input;
        } else {
            return input.substring(0, size);
        }
    }

    /**
     * 填充在data中未指定字段的默认值
     * 
     * @param data
     */
    public void fillData(Map data, DBEnvironment dbEnvironment) {
        Set keys = data.keySet();
        for (String key : this.columns.keySet()) {
            if (keys.contains(key)) {
                continue;
            }
            ColumnMeta column = this.columns.get(key);
            Object value = column.getDefaultValue(dbEnvironment);
            data.put(key, value);
        }
    }

    public static class ColumnMeta {
        /**
         * 字段名称
         */
        String  columnName;
        /**
         * 字段大小
         */
        int     size;
        /**
         * 字段类型名称
         */
        String  typeName;
        /**
         * 是否允许null?
         */
        boolean isNullable;

        /**
         * 默认值
         */
        Object  defaultValue;

        /**
         * 对应的java类型
         */
        String  javaType;

        @Override
        public String toString() {
            return "[columnName=" + columnName + ", size=" + size + ", typeName=" + typeName + ", isNullable="
                    + isNullable + ", defaultValue=" + defaultValue + "]";
        }

        public Object getDefaultValue(DBEnvironment dbEnvironment) {
            if (this.isNullable()) {
                return null;
            }

            if ("java.lang.String".equals(javaType)) {
                return "test4j".subSequence(0, size > 6 ? 6 : size);
            } else {
                Object value = dbEnvironment.getDefaultValue(javaType);
                return value;
            }
        }

        public String getColumnName() {
            return columnName;
        }

        public int getSize() {
            return size;
        }

        public String getTypeName() {
            return typeName;
        }

        public boolean isNullable() {
            return isNullable;
        }

        public Object getDefaultValue() {
            return defaultValue;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy