概述
处理数据库Null值
数据库表的列可以定义为NULL或NOT NULL。NULL表示列可以存储NULL值;NOT NULL表示列不可以包含NULL值。NULL值表示值是未知的。当在数据库中创建表时,如果没有指定列是NULL还是NOT NULL,数据库默认为NULL。
Java对象类型,比如String,可用于存储数据库NULL值。当一个查询将包含NULL值的列检索存储到Java String时,String就会包含Java null值。例如,顾客 #5的phone列(定义为VARCHAR2)为NULL,下面的语句使用getString()方法将该值读取到String类型的phone中:
phone = customerResultSet.getString("phone"); |
运行该语句之后,phone Java String就包含了Java null值。
NULL值存储在Java对象中是非常合适的,但对于Java数字、逻辑和位类型类型呢?如果将NULL值检索存储到Java数据、逻辑或位变量中,例如int、float、boolean或byte,则变量将包含值零。对于数据库,零和NULL是不同的值:零是一个确定的值,NULL表示值未知。这就导致了一个问题,在Java程序中如何区分零和NULL。
有两种方法可以解决这个问题:
1,使用ResultSet中的wasNull()方法。当从数据库中检索到的值是NULL时,wasNull()方法返回true;否则,返回false。
2,可以使用Java包装类。包装类是一个Java类,允许定义包装对象,包装对象可用于存储数据库返回的列值。包装对象将数据库NULL值存储为Java null值,将非NULL值存储为正常值。
Long user_id = rs.getLong("user_id");//user_id为空时,Long这个包装类将user_id置为0.
String nickname = null;
String phone = null;
if(user_id!=0){
UserDaoImpl userDaoImpl = new UserDaoImpl();
User user = userDaoImpl.findUserByid(user_id);
nickname = user.getNickname();
phone = user.getPhone();
}
下例显示第一个方法的用法,使用了products表的产品#12。该行的product_type_id列为NULL值,而且该列定义为数据库INTEGER。并假设ResultSet对象productResultSet已经用products表的产品#12的product_id和product_type_id列填充。下例使用wasNull()方法检查读取的product_type_id列值是否为NULL:
System.out.println("product_type_id = " + |
因为product_type_id列包含NULL值,wasNull()返回true,所以会显示字符串Last value read was NULL。
第二种方法使用Java包装类,在看第二种方法的例子之前,需要解释包装类到底是什么。包装类定义在java.lang包中,下面的7个包装类就定义在该包中:
● java.lang.Short
● java.lang.Integer
● java.lang.Long
● java.lang.Float
● java.lang.Double
● java.lang.Boolean
● java.lang.Byte
使用这些包装类声明的对象可用于表示各种类型数字和Boolean类型的数据库NULL值。当数据库NULL被检索到这样一个对象时,它就会包含Java null值。下例声明了一个java.lang.Integer,名为productTypeId:
java.lang.Integer productTypeId |
然后,可以调用getObject()方法,将数据库NULL存储到productTypeId中,如下所示:
productTypeId = |
getObject()方法返回java.lang.Object类的一个实例,必须强制转换为合适的类型,本例中,转换为java.lang.Integer。假定此例从productResultSet中读取和上一个例子相同的行,getObject()会返回Java null值,而且该值会被复制到productTypeId中。当然,如果从数据库检索到的值不是NULL,productTypeId就会包含该值。例如,如果从数据库检索到的值是1,productTypeId就会包含值1。
也可以在JDBC语句中使用包装类对象,该语句执行INSERT或UPDATE,将列设置为正常值或NULL值。如果想要使用包装类对象将列值设置为NULL,就要将包装类对象设置为null,并在INSERT或UPDATE语句中使用它将数据库列设置为NULL。下例使用被设置为null的java.lang.Double对象,将产品#12的price列设置为NULL:
java.lang.Double price = null;
|
最后
以上就是难过豆芽为你收集整理的处理数据库Null值的全部内容,希望文章能够帮你解决处理数据库Null值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复