精华内容
下载资源
问答
  • Gson同字段不同类型数据解析总结

    千次阅读 2019-06-17 13:56:02
    最近使用Retrofit进行网络请求时,自带Gson解析json时遇到一个问题,返回的json数据中某个字段可能为jsonArray,也可能是jsonObject,也有可能为空(即同一个字段,返回可能是对象,数组,null)。 错误回顾 测试...

    前言

           最近使用Retrofit进行网络请求时,自带Gson解析json时遇到一个问题,返回的json数据中某个字段可能为jsonArray,也可能是jsonObject,也有可能为空(即同一个字段,返回可能是对象,数组,null)。

    错误回顾

    测试数据:

    如果返回的数据类型有两种以上,但你定义json的实体类bean属性类型时,可能只使用了jsonObject或者jsonArray,网络请求时会报如下错误:

    Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 4 column 514 path $.CanLoanBook
    		at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
    		at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
    		at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
    		at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
    		at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:22

    上面出错原因是字段CanLoanBook使用了数组进行映射,但CanLoanBook实际是对象。根据上面错误提示可能你会这样做:

    把实体类的字段从原来的

    private List<CanLoanBookBean> CanLoanBook;
    改为如下:
    
    private CanLoanBookBean CanLoanBook;

    上面确实临时 解决了问题,但当后端CanLoanBook返回是数组时,上面还是会报错,不妨自己试一下。

    另外,网上也有一些方案通过自定义Gson序列化器或者解析异常时,使用另一种是实体类处理,这两种方式要么处理麻烦,要么产生多余的类。

    解决方案

    1、与后端协商,规范数据格式,保证返回字段类型不变

     这种情况虽然处理起来最省事,得到期望结果,但是后端的大佬可能不会随便改动数据接口,让你想办法解决。严格来说,这种字段数据类型变化是不规范化的。

    2、把数据映射为ResponseBody再解析

     这种情况要先把ResponseBody转成字符串,再采用对应框架,逐个字段解析封装到对应实体,然后需要对特殊字段进行数据类型判断。这种方案虽然可取,但解析麻烦,费时,显然不给力。

    下面顺便介绍下两种方法怎么对json数据字段类型判断:

    1.使用Android自带的JSONTokener解析

     try {
                JSONObject jsonObject = JSONObject(jsonStr);
                String canLoanBook = jsonObject.getString("CanLoanBook");
                Object obj = new JSONTokener(canLoanBook).nextValue();
                if (obj instanceof JSONArray) {
                    JSONArray jsonArray = (JSONArray) obj;
                    for (int k = 0; k < jsonArray.length(); k++) {
                        JSONObject parameterObject = jsonArray.getJSONObject(k);
                            //开始逐个字段解析,封装到对应bean,省略
                    }
                } else if (obj instanceof JSONObject) {
                    JSONObject jObj = (JSONObject) obj;
                     //开始逐个字段解析,封装到对应bean,省略
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            

    2.使用Gson框架解析

            Gson gson = new Gson();
            JsonParser parser = new JsonParser();
    		JsonElement element = parser.parse(jsonStr);
    		if (element.isJsonObject()) {//假设最外层是object
    			// 把JsonElement对象转换成JsonObject
    			JsonObject JsonObject = element.getAsJsonObject();
    			JsonElement jsonElement = JsonObject.get("CanLoanBook");
    			if (jsonElement.isJsonObject()) {
    				CanLoanBookBean canLoanBookBean = gson.fromJson(jsonElement, CanLoanBookBean.class);
    			} else if (jsonElement.isJsonArray()) {
    				Type type = new TypeToken<List<CanLoanBookBean>>() {}.getType();
    				// 把JsonElement对象转换成JsonArray
    				List<CanLoanBookBean> list = gson.fromJson(jsonElement, type);
    			
    			}
    		}

     3、把实体类特殊字段的数据类型改为Object再转换

    也就是说不管json字段是对象还是数组,统一使用Object接收数据,这样不会出现异常。

      /**
         * 1.不管是jsonArray还是jsonObject,统一用Object接收
         * 2.使用Gson对CanLoanBook字段统一换成List,反射赋值CanLoanBook
         * 3.最后对CanLoanBook强转成对应类型
         */
        private Object CanLoanBook;
        

    这种方式需要再用gson对Object对象进行手动解析,可以参考上面方案2的第2种解析方式。

    附上转换方法:

    /**
         * 转换和赋值
         *
         * @param sourceObj     原数据对象
         * @param methodName    需要赋值原数据对象的方法名
         * @param filedObjValue 需要处理的字段对象值
         * @param filedMapClass 处理的字段对象映射Class
         */
        public static void performTransformWithEvaluation(Object sourceObj, String methodName, Object filedObjValue,
                                                           Class filedMapClass) {
            List<Object> listObjects = performTransform(filedObjValue, filedMapClass);
            Class<?> clazz = sourceObj.getClass();
            Method method = null;
            try {
                method = clazz.getMethod(methodName, Object.class);
                method.invoke(sourceObj, listObjects);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 统一转换成List输出,对于基本类型,取出集合中的值即可
         *
         * @param filedObjValue 需要处理的字段对象值
         * @param filedMapClass 处理的字段对象映射Class
         * @return
         */
        public static <T> List<T> performTransform(Object filedObjValue, Class filedMapClass) {
            List<T> beanList = new ArrayList<T>();
            Gson gson = new Gson();
            String jsonStr = gson.toJson(filedObjValue);
            JsonParser parser = new JsonParser();
            JsonElement element = parser.parse(jsonStr);
            if (element.isJsonObject()) {
                // 把JsonElement对象转换成JsonObject
                T t = (T) gson.fromJson(element, filedMapClass);
                beanList.add(t);
            } else if (element.isJsonArray()) {
                //下面会导致T为LinkedTreeMap,说明Gson解析时不支持泛型
    //            Type type = new TypeToken<List<T>>() {}.getType();
    //            // 把JsonElement对象转换成JsonArray
    //            List<T> list = gson.fromJson(element, type);
    
    
                List<T> list = jsonToList(element,filedMapClass);
                beanList.addAll(list);
            } else if (element.isJsonPrimitive()) {
                T t = (T) gson.fromJson(element, filedMapClass);
                beanList.add(t);
            } else {
                // element.isJsonNull()
                return null;
            }
            return beanList;
        }
    
        /**
         * 通过json字符串转List
         * @param json
         * @param clazz
         * @param <T>
         * @return
         */
        public static <T> List<T> jsonToList(String json, Class clazz) {
            Type type = new ParameterizedTypeImpl(clazz);
            List<T> list = new Gson().fromJson(json, type);
            return list;
        }
    
        /**
         * 通过element转List
         * @param element
         * @param clazz
         * @param <T>
         * @return
         */
        public static <T> List<T> jsonToList(JsonElement element, Class clazz) {
            Type type = new ParameterizedTypeImpl(clazz);
            List<T> list = new Gson().fromJson(element, type);
            return list;
        }
    
       /**
         * 自定义ParameterizedType
         */
        private static class ParameterizedTypeImpl implements ParameterizedType {
            Class clazz;
    
            public ParameterizedTypeImpl(Class clz) {
                clazz = clz;
            }
    
            /**
             * 返回实际类型组成的数据,比如Map<String,Long> map的类型是:java.lang.String、java.lang.Long
             * @return
             */
            @Override
            public Type[] getActualTypeArguments() {
                return new Type[] { clazz };
            }
    
            /**
             * 返回原生类型,比如Map<String,Long> map的原生类型为java.util.Map
             * @return
             */
            @Override
            public Type getRawType() {
                return List.class;
            }
    
            /**
             * 返回 Type 对象,表示此类型是其成员之一的类型,比如Map.Entry<Long,Short> map的OwnerType为java.util.Map
             * @return
             */
            @Override
            public Type getOwnerType() {
                return null;
            }
        }
    

    关于参数化类型ParameterizedType(除此之外,还有TypeVariable、GenericArrayType、WildcardType,其父接口Type是Java 编程语言中所有类型的公共高级接口) 的用法这里就不多说,在Android开发中很常见,比如:MVP模式中BaseActivity,经常指定一个泛型P(Presenter),让子类继承BaseActivity并制定具体的Presenter;RecyclerView.Adapter等等。

    基本使用示例:

    	BookBean bookBean = gson.fromJson(jsonStr, BookBean.class);
    		performTransformWithEvaluation(bookBean, "setCanLoanBook", bookBean.getCanLoanBook(), CanLoanBookBean.class);
    		List<CanLoanBookBean>  canLoanBookBeans=  (List<CanLoanBookBean>) bookBean.getCanLoanBook();
    		System.out.println("canLoanBookBeans:" + canLoanBookBeans);

    在Retrofit使用示例:

      RetrofitUtils.getInstance().getService().getBookDetail(v_recno, v_curtable, time)
    
                    .map((Function<BookDetail, BookDetail>) bookDetail -> {
                
                        JsonUtils.performTransformWithEvaluation(bookDetail,"setCanLoanBook",bookDetail.getCanLoanBook(),BookDetail.CanLoanBookBean.class);
                        return bookDetail;
                    })
                    .compose(RxSchedulers.<BookDetail>applySchedulers())
                    .subscribe((Consumer<BookDetail>) bookDetail -> {
    
    
                    }, (Consumer<Throwable>) throwable -> {
    
                    });

     上面还可以再优化一下,自定义一个Gson反序列化器,把上述方法放进序列化器中,这样网络请求后,不需要对数据进行map转换。

    方案对比

    方案1:是最省事的,不建议后端数据接口同字段返回不同类型数据(适合字段数据类型固定,正常情况都是这种数据)

    方案2:解析费时费力,完全手动解析(适合大量字段数据类型变化的情况)

    方案3(建议):不用改Retrofit现有Gson转换器,只需要对特殊字段处理即可(适合少量字段数据类型变化的情况,如果都变化,这样的json数据存在意义不大)

    总结 

           本次就是开发过程中遇到的问题,只要网络请求出现类似的问题:同字段返回不同类型数据,解析框架出现IllegalStateException,都可以用上述方案3解决。

    展开全文
  • Django 模型(Model)字段类型参数详解 序号 字段类型(Filed Types) 描述 1 AutoField 根据可用id自动递增的整数字段。通常不需要直接使用它;如果...

    Django 模型(Model)字段类型级参数详解

    序号

    字段类型(Filed Types)

    描述

    1

    AutoField

    根据可用id自动递增的整数字段。通常不需要直接使用它;如果不指定主键字段,则会自动将主键字段添加到模型中。

    2

    CharField

    用来存储字符串,必须制定范围,如果存储大文本字符串,应当用TextField.

    3

    DateField

    使用Python的datetime.date实例保存的日期。auto_now = True:每次保存对象时,自动设置该字段为当前时间;auto_now_add=True:对象第一次被创建时自动设置当前时间。需要注意的是,自动保存的时间的时区使用的是默认时区。

    4

    DateTimeField

    使用Python的datetime.datetime实例表示的日期和时间。

    5

    TextField

    存储大字符串

    6

    BigIntegerField

    64位的整型数值,从 -2^63 (-9223372036854775808) 到 2^63-1(9223372036854775807)

    7

    BinaryField

    存储二进制码的Field. 只支持bytes 赋值。

    8

    BooleanField

    该字段的默认表单控件是CheckboxInput,如果你需要设置null 值,则使用NullBooleanField 来代替BooleanField。

    9

    FloatField

    用Python的一个float 实例来表示一个浮点数。

    10

    UUIDField

    一个用来存储UUID的字段。使用Python的UUID类。

    11

    ForeignKey

    多对一关系

    12

    ManyToManyField

    多对多关联

    13

    OneToOneField

    一对一关联关系

    1、null=True      数据库中字段是否可以为空

    2、blank=True         django的 Admin 中添加数据时是否可允许空值

    3、primary_key = False

    主键,对AutoField设置主键后,就会代替原来的自增 id 列

    如果您没有为模型中的任何字段指定primary_key=True, Django将自动添加一个IntegerField来保存主键,所以您不需要在任何字段上设置primary_key=True,除非您想要覆盖默认的主键行为。有关更多信息,请参见自动主键字段。

    主键字段是只读的。如果您更改现有对象上的主键值,然后保存它,就会在旧对象旁边创建一个新对象。例如:

    from django.db import models
    
    class Fruit(models.Model):
    
    name = models.CharField(max_length=100, primary_key=True)
    
    fruit = Fruit.objects.create(name='Apple')
    >>> fruit.name = 'Pear'
    >>> fruit.save()
    >>> Fruit.objects.values_list('name', flat=True)
    <QuerySet ['Apple', 'Pear']>

    4、auto_now 和 auto_now_add

    auto_now   自动创建---无论添加或修改,都是当前操作的时间

    auto_now_add  自动创建---永远是创建时的时间

    5、choices

    GENDER_CHOICE = (
    
            (u'M', u'Male'),
    
            (u'F', u'Female'),
    
        )
    gender = models.CharField(max_length=2,choices = GENDER_CHOICE)

    6、max_length      字符串最大长度

    7、default        默认值

    8、verbose_name Admin         中字段的显示名称

    9、name|db_column  数据库中的字段名称

    10、unique=True  

    不允许重复,例如用户名注册时候是不允许重复的,在username字段里设置,不让重复

    11、db_index = True  数据库索引    

    12、editable=True  在Admin里是否可编辑

    13、error_messages=None  

    错误提示   

    把错误提示修改成你想要的报错,这里加个字典来完成 gender = models.CharField(max_length=2,choices = GENDER_CHOICE,error_messages={"错误类型":"错误原因"})

    14、auto_created=False  自动创建

    15、help_text  在Admin中提示帮助信息

    16、validators=[]    提示区间,例如电话号码范围

    17、upload-to   文件上传功能 在 FileField 里加入 例如: file = modles.FileField(upload-to = "./upload/"      指明上传的文件防止根目录下的/upload/文件夹下

    展开全文
  • 但例子中生成的数据表只有一种类型,但在面对多种类型的数据时又该怎么存储呢? 其实方法很简单,在我们继承的 models.Model 已经声明好了对应类,不同类对应数据库中不同属性。 下面介绍一些常用属性的对应类: ...

    在前边的博客里已经介绍了如何使用Models,以及如何使用第三方数据库,

    但例子中生成的数据表只有一种类型,但在面对多种类型的数据时又该怎么存储呢?

    其实方法很简单,在我们继承的 models.Model 已经声明好了对应类,不同类对应数据库中不同属性。

    下面介绍一些常用属性的对应类:

    一  索引,字符,数字

    1、models.AutoField  
              自增列   如果没有,默认会生成一个名称为 id 的列,
              如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。

    2、models.BigAutoField
              自增列 当数据过多时可用 BigAutoField 代替 AutoField

    3、models.CharField  
               字符串字段  单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。
               必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。

    4、models.TextField  
               字符串 ,一个容量很大的文本字段

    5、models.IntegerField  
               整形   用于保存一个整数

    6、models.SmallIntegerField  
              类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)

    7、models.BigIntegerField  
               长整形

    8、models.PositiveIntegerField  
               类似 IntegerField, 但取值范围为非负整数(允许0值,可以理解为无符号整数)

    9、models.PositiveSmallIntegerField  
               正smallInteger  正小整型字段,类似 PositiveIntegerField, 取值范围较小(数据库相关)

    10、models.FloatField  
              浮点类型 = double   浮点型字段。 必须提供两个 参数:
                      max_digits:总位数(不包括小数点和符号)  
                      decimal_places:小数位数。

     

    二  日期时间,文件

    1、models.DateField  
              日期类型 YYYY-MM-DD   参数:
                    auto_now = True 则每次更新都会更新这个时间;
                    auto_now_add =True 则只是第一次创建添加,之后的更新不再改变。

    2、models.DateTimeField  
               日期类型 YYYY-MM-DD hh:mm:ss   同DateField的参数

    3、models.TimeField
              日期类型 hh:mm:ss   同DateField的参数

    注意:具体的文件上传会在之后的篇幅展开说明

    4、models.FileField
              文件上传字段。 一个必须参数:
                     upload_to : 一个用于保存上传文件的本地文件系统路径。
                     由于性能需求文件不会被直接存储到数据库中
                     非必需参数 storage  用来设定文件存储仓库

    5、models.FilePathField          
              选择指定目录按限制规则选择文件,有三个参数
              path:必需参数,一个目录的绝对文件系统路径。 FilePathField 据此得到可选项目。
              match:可选参数, 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名。
                           注意:这个正则表达式只会应用到 base filename 而不是路径全名。
              recursive:可选参数, 是否包括 path 下全部子目录,True 或 False,默认值为 False。

    6、models.ImageField
              图像文件上传字段,继承了models.FileField,可以通过 upload_to 指定上传路径
              height_field,width_field 如果提供这两个参数,则图片将按提供的高度和宽度规格保存。

    三  布尔,其他特殊类型

    1、models.BooleanField   布尔类型=tinyint(1)   不能为空,Blank=True

    2、models.NullBooleanField:类似 BooleanField, 不过允许 NULL 作为其中一个选项。

    3、models.IPAddressField   字符串类型(ip4正则表达式)   一个字符串形式的 IP 地址

    4、models.PhoneNumberField   一个带有合法美国风格电话号码校验的 CharField(格式:XXX-XXX-XXXX)

    5、models.URLField   字符串,地址正则表达式   用于保存URL。若 verify_exists 参数为 True (默认),
                                          给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应)

    6、models.SlugField   减号、下划线、字母、数字   它们通常用于URLs。

    7、models.XMLField  
                XML字符字段,校验值是否为合法XML的 TextField,必须提供参数:
                schema_path:校验文本的 RelaxNG schema 的文件系统路径。

    8、models.BinaryField   ---二进制

    展开全文
  • MyBatis-Plus - 字段类型处理器

    千次阅读 2020-08-31 22:31:43
    类型处理器,用于 JavaType JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值,本文讲解mybaits-plus内置常用类型处理器如何通过TableField注解快速...

    类型处理器,用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值,本文讲解 mybaits-plus 内置常用类型处理器如何通过TableField注解快速注入到 mybatis 容器中。

    示例工程

    👉 mybatis-plus-sample-typehandler

    • JSON 字段类型
    @Data
    @Accessors(chain = true)
    @TableName(autoResultMap = true)
    public class User {
    
        private Long id;
        ...
    
        /**
         * 注意!! 必须开启映射注解
         *
         * @TableName(autoResultMap = true)
         *
         * 以下两种类型处理器,二选一 也可以同时存在
         *
         * 注意!!选择对应的 JSON 处理器也必须存在对应 JSON 解析依赖包
         */
        @TableField(typeHandler = JacksonTypeHandler.class)
        // @TableField(typeHandler = FastjsonTypeHandler.class)
        private OtherInfo otherInfo;
    }

    该注解对应了 XML 中写法为

    <result column="other_info" jdbcType="VARCHAR" property="otherInfo" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
    • 注意1:此版本至少在 3.2.0 开始才生效噢~
    • 注意2:不需要 mysql 字段一定是 json 类型,text 也可以的,但是数据长的必须符合 json 规范!

     

    扩展内容

    展开全文
  • 字段类型与合理的选择字段类型

    千次阅读 2017-01-12 23:04:26
    本篇博客稍微有点长,它实际上包括两个内容:一是mysql字段类型的介绍,二是在mysql建表过程中是如何正确选择这些字段类型; 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是...
  • Mapping,映射,相当于关系型数据库创建语句,定义文档字段及其类型、索引存储方式。通常会涉及如下方面: 文档中哪些字段需要定义成全文索引字段。 文档中哪些字段定义为精确值,例如日期,数字、地理位置等。 ...
  • 上文中我们介绍了如果给Controller中的参数添加字段说明:https://blog.csdn.net/shangcunshanfu/article/details/100838687,也留下了一个问题,那就是如何给JSONObject类型参数添加字段说明,本章就来进行介绍 ...
  • Mysql字段类型与合理选择

    千次阅读 2018-07-26 11:54:21
    字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。 许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值...
  • MySQL 字段类型

    千次阅读 2018-06-19 21:08:56
    值得注意的是---无论数值还是字符,这些类型的子类是字节,它们的不同仅仅在于支持数据大小不同而已。数值 MySQL 的数值类型可大致划分为两个类别,一个是整数,另一个是浮点数或小数。 MySQL 允许我们指定数值...
  • 之前在对象类型(object)小节中,我们提到假如需要索引字段是对象数组,而不是对象,这时我们需要使用嵌套数据类型。 形如下面的示例数据结构。 { "group" : "fans", "user" : [ { "first" : "John", "last" ...
  • 从零开始Tableau | 4.数据与字段类型

    千次阅读 2018-08-30 16:11:34
    tableau对数据和字段有着特定的定义方式,弄清楚他们的...数据源的所有字段在tableau中都会被分配一个数据类型,同时 tableau还会在各字段前加上一个特定的标识,用以直观提示该字段是哪一种数据类型,tableau...
  • 自从java支持泛型后,现在,spring生态中的框架及目前的...比如,mybatis orm环境下,数据库字段类型和java类型不匹配检测的功能,需要利用这种方法获取类中方法的具体类型,结合com.mysql.cj.MysqlType枚举中类型...
  • es 新增字段类型写法 put index/_mapping/type 内容直接是type 不要携带mapping
  • 需求的来源是项目。每次做项目,都要建立很多的数据体,有的是数据库表产生的ORM,有的是网络请求的参数体,有的是网络接口...虽说可以建立一些ORM无关的字段来用,但是字段多了会很麻烦,所以需要建立专用的VO数据类
  • 常用数据库的字段类型及大小

    万次阅读 2016-05-21 12:01:06
    racle/MSSQL/Mysql 常用数据库的字段类型及大小 ORACLE的数据类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 变长度的字符串...
  • elasticsearch中的字段类型/mapping参数

    万次阅读 2017-06-25 23:46:14
    查看表结构的定义  GET /testindex/_mapping  GET /testindex/testtable/_mapping (一)核心数据类型: ...(1)string: 默认会被分词  ...string类型包括:text 和 keyword ... "type": "string", //字符串类型
  • django_forms_字段类型_参数

    千次阅读 2018-03-05 17:49:49
    1、charfield 对应单行输入框2、booleanfield 对应checkbox选择框3、choicefield 对应下拉菜单选择框 重要参数choice4、datafield 对应一个单行输入框,但是会自动转化为日期类型5、emailfield 对应输入框,...
  • ORACLE数据库字段类型说明

    万次阅读 2018-04-03 17:08:36
    ORACLE数据库字段类型说明 目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型、数字数据类型、日期时间数据类型、大型对象(LOB)数据类型、RAW和LONG RAW数据类型、ROWID和UROWID数据...
  • sqlite数据库字段类型

    千次阅读 2020-03-25 14:30:39
    数据库字段类型: 字符型字段 topic=models.CharField(max_length=)#需要传入参数,设置字符串的最长长度 email=models.EmailTield()#电子邮箱字段,在CharField基础上,增加了邮箱的正则验证 a=models.SlugField()#...
  • sql 字段类型转换

    千次阅读 2019-07-15 09:03:19
    MySQL 的CAST()函数用来获取一个类型的值,并产生另一个类型的值 cast()函数是一个转换函数,参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。 cast 转换为double 类型,对于D\M取值注意事项。...
  • 多字段类型字段 ”。 作用就是,有些字段有时候需要被检索,有时候需要被聚合。检索时,需要字段是analyzed,也就是mapping时默认的形式,这时候字段如果是多个单词,就可以分别拿单词来检索;这时候检索条...
  • MyBatis处理MySQL字段类型datedatetime

    千次阅读 2019-05-06 18:26:35
    MyBatis处理MySQL字段类型datedatetime 晚歌y 关注 0.3 2018.07.26 18:31* 字数 331 阅读 13204评论 0喜欢 4 1) DATETIME 显示格式:yyyy-MM-dd HH:mm:ss 时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:...
  • logstash修改字段类型

    万次阅读 2017-09-05 21:52:38
    logstash 中可以设置字段类型为integer,float,string filter{ mutate{ convert => ["request_time","float"] #设置request_time的类型为float类型 } } 注意:mutate 除了转化字符值,还支持对数组类型字段进行...
  • 1,前端样式 2,html代码 {% load asset_filter %} &lt;div class="col-sm-2"&gt; &lt;select class="input-sm form-control select2 inline" name="...g
  • pg 数据库中 某字段类型为jsonJava实体中对应类型是 jsonObject private JSONObject info;在mybatis的xml中,常规无法直接进行映射,需要自己写一个TypeHandler,自定义一个JSONTypeHandlerPg类具体代码:package ...
  • 在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。 Text 类型: ... 保存固定长度的字符串(包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 VARCHAR(si...
  • 常用的数据库的字段类型及大小

    万次阅读 多人点赞 2018-08-28 08:30:15
    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小     ORACLE的数据类型  常用的数据库字段类型如下:  字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes `  VARCHAR2 ...
  •  //字段泛型类型  Generic ge = new Generic();  Field f = ge.getClass().getDeclaredField("list");  Type type = f.getGenericType();  ParameterizedType pt = (Parameterized...
  • django系列3—数据库字段类型

    千次阅读 2020-06-15 22:05:08
    字段类型 字段类型指使用Django ORM创建数据库时支持的数据字段类型。 常用字段 (1) AutoField 自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。 (2) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 791,981
精华内容 316,792
关键字:

参数类型可与字段类型不同