Java 检查数据库中的int变量是否为null或为空

Java 检查数据库中的int变量是否为null或为空,java,jdbc,Java,Jdbc,我有一个变量,它是: nocustomers = rs.getInt("CUST_TRAN_COUNT"); 我想执行它是否为空 我试过了 if (nocustomers ==null) 它显示了一个错误 我如何解决这个问题 我新修改的代码是: try{ query=" select * from SS_summary where txn_date = to_date ('"+asatdate+"','YYYY-MM-DD') "; st = conn.createSta

我有一个变量,它是:

nocustomers = rs.getInt("CUST_TRAN_COUNT");
我想执行它是否为空

我试过了

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

%>

int
不能为
null
,因为它是基本类型

出于同样的原因,无法返回
null

您需要在调用
getInt()
后立即调用,以检查值是否为
null

请注意,由于
int
不能为
null
即使数据库值为
null
,客户也不会有值
getInt()
被定义为在DB值为
null
时返回
0
,因此
nocustomers
0

结果集
行集
上有一个方法:

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


如果值为
NULL
,则
getInt
将返回0,然后您可以调用
wasNull
检查它是否包含0或是否为
NULL


另请参见:

在编译时,java编译器将发出以下消息:

incomparable types: int and <nulltype>
if (nocustomers  == null) {
      ^
你可以用

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,以便您可以执行所需的操作

您不能检查原始数据类型是否为null(=null pointer),只能检查指向对象的指针。什么是
rs
?您必须检查您的ORM/SQL适配器是否具有此类功能。错误是什么,此变量的数据类型是什么。相关:@maas,您不需要执行
rs.wasNull()
,因为
rs.getInt()
将在默认情况下返回
0
。更确切地说,
if(nocustomers==0){out.println(“找不到数据”);}
我会得癌症,因为看了这个示例代码:(将
0
分配给
nocustomers
if
wasNull()
返回
true
是多余的,因为这已经是
getInt()
在这种情况下会返回。@Joachim Sauer,确实如此。OP不应该担心检查null,除非OP想将
-1
定义为
null
。我将赋值从
0
更改为
-1
,用于使用
结果集.wasNull()
。if(rs.next()){nocustomers=rs.getInt(“CUST_TRAN_COUNT”)}如果(rs.wasNull()){out.println(“未找到数据”);}它显示error@maas:请发布完整代码和完整堆栈跟踪(编辑问题或发布新问题)。resultSet.wasNull()不起作用,并显示错误“java.sql.SQLException:未读取数据”@maas:您什么时候调用它的?在调用
wasNull()
之前必须调用
getInt()
。请向我们显示您的代码。if(rs.next()){nocustomers=rs.getInt(“CUST\u TRAN\u COUNT”)}if(rs.wasNull()){out.println(“未找到数据”)}显示错误“java.sql.SQLException:未读取数据”@maas:确保只有在调用了
getInt
之后才调用它。resultSet.wasNull()不起作用,并显示错误“java.sql.SQLException:No data read”这些“罕见”的情况是什么?问题发生在mysql驱动程序的某个版本上,在该版本中,我调用getObject后,同一列的getInt会抛出异常
  int value = rs.getInt("CUST_TRAN_COUNT");
  boolean nullValue = rs.wasNull();