如果cursor为空或null,则如何继续

时间:2016-03-07 12:22:03

标签: android sqlite cursor

我有一个sqlite数据库,我想查询并检索一些值(如果它们存在的话,以防它们不存在的情况下祝酒。

对于这个海豚,我有下一个代码,它将调用一个函数来创建游标,如果这不是空的,它将在edittext中检索信息,否则它将进行祝酒:

private String lookforelementID() {
// TODO Auto-generated method stub
     int ElementRequest=0;

     ElementRequest = Integer.parseInt(eTElementNumb.getText().toString());
     try{
         database db = new database(this);
         db.open();

         String passedReg = getIntent().getStringExtra(MainActivity.ID_STUDY);

            String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);

            if (returnedInfo1.matches("")){
                Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
            }else{
                    eTIDElement.setText(returnedInfo1);
                String returnedInfo2 = db.elementID(ElementRequest, passedReg, 2);
                    eTElementCode.setText(returnedInfo2);
                String returnedInfo3 = db.elementID(ElementRequest, passedReg, 3);
                    eTElementDecription.setText(returnedInfo3);

            }

                db.close();
     }catch(ClassCastException e){
         e.printStackTrace();
     }
     eTElementNumb.setText(""); 
     return null;

}

光标的功能如下:

             public String elementID(int elementRequest, String idStudy, int i) {
            // TODO Auto-generated method stub
            String[] columns = new String[]{ KEY_ROWELEMENTID, KEY_STUDYID, KEY_ELEMENTCODE, KEY_ELEMENTNAME};
            Cursor c = ourDatabase.query(DATABASE_TABLEELEMENTS, columns, KEY_ELEMENTCODE + "=" + elementRequest + " AND " + KEY_STUDYID + "=" + idStudy, null, null, null, null);
            String ElementInformation = null;
            if(c != null){
                c.moveToFirst();
                ElementInformation = c.getString(i);     
            }
            return ElementInformation;
        }

2 个答案:

答案 0 :(得分:0)

您通过以下行声明并初始化Cursor

  

Cursor c = ourDatabase.query(DATABASE_TABLEELEMENTS, columns, KEY_ELEMENTCODE + "=" + elementRequest + " AND " + KEY_STUDYID + "=" + idStudy, null, null, null, null);

这意味着它不能null(如果'我们的数据库'为空或无法访问NullPointerException或其他某种Exception将被抛出)。因此,您无需检查Cursor是否为null

如何找出Cursor是空的还是(如果不是)列值是否为空?

您可以利用moveToFirst()以及isNull()返回boolean值的事实:

String ElementInformation = null;
if(c.moveToFirst() && ! c.isNull(i))
{
    ElementInformation = c.getString(i);     
}
return ElementInformation;

这样,如果elementID()为空,如果有一行符合搜索条件但其值为列,则您的方法null会返回Cursor '我'是null

当然,您现在必须相应地评估返回值:

String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);

if (returnedInfo1 == null){
    Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
}
else{
    // ... do something else ...
}

答案 1 :(得分:-1)

如果你怀疑是否找到游标对象是否为空,那么只需检查

if(c.moveToNext()){
   //process your cursor object 
}
else{
   //your cursor is empty do whatever you want 
}

另一方面,如果你想迭代光标对象,只需说

while(c.moveToNext()){
  //process your cursor object 
}