检查int变量是null还是从数据库中为空

时间:2011-09-14 06:41:06

标签: java jdbc

我有一个变量:

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");
        }

%>

5 个答案:

答案 0 :(得分:7)

int不能是null,因为它是原始类型。

出于同样的原因,ResultSet.getInt()无法返回null

您需要在getInt()来电后立即致电ResultSet.wasNull(),以检查价值是否为null

请注意,由于int不能为null,因此即使数据库值为nocustomernull也会有值。 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)

ResultSetRowSet上有wasNull种方法:

  

报告最后一列读取的值是否为SQL NULL。请注意,必须首先调用列上的其中一个getter方法以尝试读取其值,然后调用方法wasNull以查看读取的值是否为SQL NULL