示例#1
0
 public ValueAdaptor getAdaptor(MappingField ef) {
   Mirror<?> mirror = ef.getTypeMirror();
   // 为数字型枚举的特殊判断
   if (mirror.isEnum() && ColType.INT == ef.getColumnType()) return Jdbcs.Adaptor.asEnumInt;
   // 用普通逻辑返回适配器
   return Jdbcs.getAdaptor(mirror);
 }
示例#2
0
  public String evalFieldType(MappingField mf) {
    if (mf.getCustomDbType() != null) return mf.getCustomDbType();
    switch (mf.getColumnType()) {
      case INT:
        // 用户自定义了宽度
        if (mf.getWidth() > 0) return "NUMERIC(" + mf.getWidth() + ")";
        // 用数据库的默认宽度
        return "INT";

      case FLOAT:
        // 用户自定义了精度
        if (mf.getWidth() > 0 && mf.getPrecision() > 0) {
          return "NUMERIC(" + mf.getWidth() + "," + mf.getPrecision() + ")";
        }
        // 用默认精度
        if (mf.getTypeMirror().isDouble()) return "NUMERIC(15,10)";
        return "NUMERIC";

      case BINARY:
        return "BYTEA";

      case DATETIME:
        return "TIMESTAMP";
      default:
        break;
    }
    return super.evalFieldType(mf);
  }
示例#3
0
  @Override
  protected String evalFieldType(MappingField mf) {
    if (mf.getCustomDbType() != null) return mf.getCustomDbType();
    switch (mf.getColumnType()) {
      case BOOLEAN:
        return "SMALLINT";
      case INT:
        // 用户自定义了宽度
        // if (mf.getWidth() > 0)
        // return "decimal(" + mf.getWidth() + ")";
        // 用数据库的默认宽度
        return "INTEGER";

      case FLOAT:
        // 用户自定义了精度
        if (mf.getWidth() > 0 && mf.getPrecision() > 0) {
          return "decimal(" + mf.getWidth() + "," + mf.getPrecision() + ")";
        }
        // 用默认精度
        if (mf.getTypeMirror().isDouble()) return "decimal(15,10)";
        return "FLOAT";
      default:
        break;
    }
    return super.evalFieldType(mf);
  }
示例#4
0
  public String evalFieldType(MappingField mf) {
    if (mf.getCustomDbType() != null) return mf.getCustomDbType();
    switch (mf.getColumnType()) {
      case CHAR:
        return "CHAR(" + mf.getWidth() + ")";

      case BOOLEAN:
        return "BOOLEAN";

      case VARCHAR:
        return "VARCHAR(" + mf.getWidth() + ")";

      case TEXT:
        return "TEXT";

      case BINARY:
        return "BLOB";

      case TIMESTAMP:
        return "TIMESTAMP";

      case DATETIME:
        return "DATETIME";

      case DATE:
        return "DATE";
      case TIME:
        return "TIME";

      case INT:
        // 用户自定义了宽度
        if (mf.getWidth() > 0) return "INT(" + mf.getWidth() + ")";
        // 用数据库的默认宽度
        return "INT";

      case FLOAT:
        // 用户自定义了精度
        if (mf.getWidth() > 0 && mf.getPrecision() > 0) {
          return "NUMERIC(" + mf.getWidth() + "," + mf.getPrecision() + ")";
        }
        // 用默认精度
        if (mf.getTypeMirror().isDouble()) return "NUMERIC(15,10)";
        return "FLOAT";

      case PSQL_ARRAY:
        return "ARRAY";

      case PSQL_JSON:
      case MYSQL_JSON:
        return "JSON";
        // TODO 这里不用加 default 么
    }
    throw Lang.makeThrow(
        "Unsupport colType '%s' of field '%s' in '%s' ",
        mf.getColumnType(), mf.getName(), mf.getEntity().getType().getName());
  }
示例#5
0
 public void setupEntityField(Connection conn, Entity<?> en) {
   Statement stat = null;
   ResultSet rs = null;
   ResultSetMetaData rsmd = null;
   try {
     // 获取数据库元信息
     stat = conn.createStatement();
     rs = stat.executeQuery(createResultSetMetaSql(en));
     rsmd = rs.getMetaData();
     // 循环字段检查
     for (MappingField mf : en.getMappingFields()) {
       try {
         int ci = Daos.getColumnIndex(rsmd, mf.getColumnName());
         // 是否只读,如果人家已经是指明是只读了,那么就不要自作聪明得再从数据库里验证了
         // if (!mf.isReadonly() && rsmd.isReadOnly(ci))
         // mf.setAsReadonly();
         // 是否非空
         if (ResultSetMetaData.columnNoNulls == rsmd.isNullable(ci)) mf.setAsNotNull();
         // 枚举类型在数据库中的值
         if (mf.getTypeMirror().isEnum()) {
           if (Daos.isIntLikeColumn(rsmd, ci)) {
             mf.setColumnType(ColType.INT);
           } else {
             mf.setColumnType(ColType.VARCHAR);
           }
         }
       } catch (Exception e) {
         // TODO 需要log一下不?
       }
     }
   } catch (Exception e) {
     if (log.isDebugEnabled()) log.debugf("Table '%s' doesn't exist!", en.getViewName());
   }
   // Close ResultSet and Statement
   finally {
     Daos.safeClose(stat, rs);
   }
 }
示例#6
0
 @Override
 public ValueAdaptor getAdaptor(MappingField ef) {
   if (ef.getTypeMirror().isOf(Blob.class)) return new BlobValueAdaptor2(Jdbcs.getFilePool());
   return super.getAdaptor(ef);
 }
示例#7
0
 public void addDefaultValue(StringBuilder sb, MappingField mf) {
   if (!mf.hasDefaultValue()) return;
   if (mf.getTypeMirror().isNumber()) sb.append(" DEFAULT ").append(getDefaultValue(mf));
   else sb.append(" DEFAULT '").append(getDefaultValue(mf)).append('\'');
 }
示例#8
0
 public ValueAdaptor getAdaptor(MappingField ef) {
   if (ef.getTypeMirror().isBoolean()) return new DB2BooleanAdaptor();
   return super.getAdaptor(ef);
 }