Oracle执行NVL查询结果存入Java对象后取值会返回null吗
问题答案
正常场景下调用getcolumn1value()返回的结果是0,仅异常配置场景下才会返回null,具体逻辑如下:
- 首先Oracle的
NVL()函数原生逻辑保证查询结果不会为null:NVL(expr1, expr2)的作用为:如果第一个参数expr1的值为null,则直接返回第二个参数expr2的值;如果expr1不为null,则返回expr1本身。你执行的SQL语句SELECT NVL(column1,0) FROM table_name中,无论原表table_name里的column1字段是否为null,Oracle返回给Java侧JDBC驱动的查询结果中,该列的值永远非空:要么是column1的非空原值,要么是数字0。 - Java侧常规映射逻辑下拿到的值为0:
无论你是直接用JDBC代码取值,还是通过MyBatis、Hibernate等ORM框架做结果映射,只要没有额外自定义的转换逻辑主动把0转为null,查询到的0会正常赋值到Java对象的对应属性中:- 如果属性是
int这类基础数值类型,会直接拿到数值0,不可能为null - 如果属性是
Integer这类包装类型,会拿到值为0的Integer对象,也不会为null
- 如果属性是
- 仅以下异常场景才会返回null:
- 字段映射配置错误:SQL查询列的别名和Java对象属性的映射名称不匹配,ORM框架没有给对应属性赋值,保留了对象初始化时的null默认值
- 自定义了结果转换逻辑:你主动在结果转换、类型处理器等逻辑中,将查询到的0转为了null
- JDBC代码逻辑错误:调用
ResultSet的wasNull()方法判断后,主动将该属性赋值为null
内容的提问来源于stack exchange,提问作者Jyoti Paliwal
相关产品推荐
相关产品推荐

