工作随笔——贰(关于字符串非空判断与数据库中日期时间问题)

来源:互联网 发布:淘宝订单好评短链接 编辑:程序博客网 时间:2024/04/30 23:39

问题描述:

1、判断某字符串非空问题。

2、日期比较问题。


解决步骤:

问题1:

1、原始判断语句:str!=null,发现没用,程序依旧会走向判断体而不会跳过。

2、改变:str.isEmpty()/str.length<=0/"".equals(str)均会报错:undefind,究其原因为在页面初始化时此语句即被使用而str在页面初始化时不会被定义,null.方法会报错。

3、改变:两层判断,第一层:str!=null||str=="",第二层:str.length<=0.达到效果。但是,可以发现,在第一层的两个比较是错误的,真正起作用的是第二层。但是由于上次的尝试,知道单独使用str.length会报错undefind,此时很疑惑。

4、改变:第一层的条件写错了,改:str!=null || str!="",但是发现在第二层的判断时又出现了undefind报错。

5、根据条件234,将判断尝试改写为:!(str==null || str=="")发现达到效果。


问题2:

1、数据库插入语句中set time = now()

2、但是在数据库中发现time字段中均为时间,而无日期。

3、查看time字段类型,为time,修改为date之后变为日期(同时也有datetime类型,但是我只需要日期所以改成了date)

4、这样修改的坏处在于之前所有的数据均变成了今天的日期,但之前并无数据可以恢复,所以也只能这样了。


问题反思:

问题1:这个问题的实质在于字符串判断非空,纠结这么长的原因在于对“字符串为空”的认知是str==null,就理所当然地认为“字符串非空”为str!=null,事实上这个是错的。

问题2:应该养成经常看数据库的习惯,对于有问题的病态的字段应及时排查。


技术获取:

1、字符串非空:!str==null

2、未初始化的字符串会在str==xxx中被初始化,而str!=xxx并不会初始化str。

3、连接符||采用从左向右最快判断方式,即优先判断连接符左边的条件,如条件为true则直接将整个判真,而不会再去判断连接符右边的条件。所以str==xxx||str.length<=0不会报错undefind而str.length<=0||str==xxx会报错。

4、数据库有time类型(仅时间-hh:mm:ss)、date类型(仅日期YYYY-MM-DD)、datetime类型(日期时间YYYY-MM-DD hh:mm:ss)

5、MYSQL插入时间的三种类型:当前日期时间now();当前日期curdate();当前时间curtime();格式同上。

6、MYSQL字段类型如果从time改变为date则所有数据会变为当前日期(因为之前没有存日期数据)。



0 0