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
在结果集
或行集
上有一个方法:
报告上次读取的列的值是否为SQLNULL
。请注意,必须首先调用列上的一个getter方法来尝试读取其值,然后调用方法wasNull
,查看读取的值是否为SQLNULL
如果值为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
ifwasNull()
返回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();