我正在为一个分配开发一个医院管理系统,如果列date_of_discharge为空,我想查看病人的详细信息并显示“未出院”。我使用mysql作为database.Do,我想在检查它为null之前将sql转换为java日期。
发布于 2018-11-24 19:20:37
空什么都不是
我想转换…吗?在检查它为空之前?
不是的。
正如其他人所评论的那样,NULL的意思是“完全没有”。在所有数据类型中,NULL是相同的。因此,当简单地询问值是否为空时,不需要进行转换、转换或解析。
与其检查null,不如直接检查它是否为null。
是。使用IS NULL或IS NOT NULL。
SELECT * FROM patient WHERE date_of_discharge IS NULL ;…或…
SELECT * FROM patient WHERE date_of_discharge IS NOT NULL ;避免脱壳
如果列date_of_discharge为null,则显示“未释放”。
在Chris Date博士的建议之后,我避免在任何可能的情况下使用NULL,就好像它是魔鬼的杰作(可能就是!)。
相反,指定一个你自己任意选择的值来表示没有被分配的价值。也许时代基准日期的Unix时间和其他系统:1970年的第一个时刻,世界协调时,1970年-01-01T00:00Z。
在Java中,我们有预定义的常量:LocalDate.EPOCH和Instant.EPOCH。
决不要在java.util.Date和java.sql.Date之间进行转换
在检查sql日期之前将sql日期转换为java util日期
不,永远不要在这两种类型之间穿插。您应该忽略这样一个事实,即java.sql.Date继承自java.util.Date。通过继承,java.sql.Date实际上承载了一天的时间.然而,java.sql.Date将自己描绘成一个仅代表日期的值,没有一天的时间,也没有时区- but,这只是一个幌子。作为一种解决办法,为了实现这个假象,这一天的时间被设定为某个时区的午夜。但是java.util.Date总是代表着世界协调时的一个时刻。因此,通过铸造,你会无意中混入某个时区的影响。
令人困惑?是。这是一个非常糟糕的设计,一个可怕的黑客,也是避免这些旧的日期-时间类的许多原因之一。使用java.time类代替。
JDBC 4.2
从JDBC 4.2开始,我们可以直接与数据库交换java.time对象。使用PreparedStatement::setObject和ResultSet::getObject方法。
假装持有日期唯一值的java.sql.Date类被java.time.LocalDate所取代。LocalDate类实际上只保存一个日期,没有一天的时间,也没有时区。
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;…和…
myPreparedStatement.setObject( … , localDate ) ;关于java.time
http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
http://www.joda.org/joda-time/项目现在在维护模式中,建议迁移到java.time类。
要了解更多信息,请参见http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 4.2。不需要字符串,也不需要java.sql.*类。
在哪里获得java.time类?
三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。
https://stackoverflow.com/questions/53461131
复制相似问题