我有一个变量:
nocustomers = rs.getInt("CUST_TRAN_COUNT");
如果它为null,我想执行。
我试过
if (nocustomers ==null)
显示错误。
我该如何解决这个问题?
我的新修改代码是:
try{
query=" select * from SS_summary where txn_date = to_date ('"+asatdate+"','YYYY-MM-DD') ";
st = conn.createStatement();
rs = st.executeQuery(query);
if (rs.next())
{
nocustomers = rs.getInt("CUST_TRAN_COUNT");
nocheques =rs.getInt("CHEQ_DELIVERED_MAIN");
}
if (rs.wasNull()) {
out.println("NO DATA FOUND");
}
%>
答案 0 :(得分:7)
int
不能是null
,因为它是原始类型。
出于同样的原因,ResultSet.getInt()
无法返回null
。
您需要在getInt()
来电后立即致电ResultSet.wasNull()
,以检查价值是否为null
。
请注意,由于int
不能为null
,因此即使数据库值为nocustomer
,null
也会有值。 getInt()
定义为在数据库值为0
时返回null
,因此nocustomers
将为0
。
答案 1 :(得分:3)
在编译时,java编译器会抱怨以下消息:
incomparable types: int and <nulltype>
if (nocustomers == null) {
^
这是因为你可以从不对基元类型进行空检查。为原始类型分配默认值(零,对于整数),如果未分配。
如果您想知道读取的值是否为null,请改用ResultSet.wasNull()
方法( 读取整数值后,请参阅提供的JavaDoc链接):
nocustomers = rs.getInt("CUST_TRAN_COUNT");
if (rs.wasNull()) {
nocustomers = -1; //Assuming, -1 means NULL.
}
答案 2 :(得分:2)
如果值为NULL
,那么getInt
将返回0,然后您可以调用wasNull
来检查它是否为0或者是{{1} }}
另请参阅:wasNull()
答案 3 :(得分:1)
你可以使用,
object obj = rs.getObject("CUST_TRAN_COUNT");
if (obj != null)
{
rs.getInt("CUST_TRAN_COUNT");
}
但在某些情况下(非常罕见)一旦调用了getObject就无法调用getInt,在这种情况下你可以简单地使用
int.parse(obj.toString())
此外,我认为更好的方法是,
int value = rs.getInt("CUST_TRAN_COUNT");
boolean nullValue = rs.wasNull();
因此,如果db返回null,则值为0,但nullValue将为true,以便您可以执行所需的
答案 4 :(得分:0)
ResultSet
或RowSet
上有wasNull
种方法:
报告最后一列读取的值是否为SQL
NULL
。请注意,必须首先调用列上的其中一个getter方法以尝试读取其值,然后调用方法wasNull
以查看读取的值是否为SQLNULL
。