如何检查Cursor中的一个列值是否为空?

时间:2013-05-10 08:43:28

标签: android android-sqlite android-cursor

我试图在我的数据库中插入值取决于值的状态。

如果 COLUMN_FIELDS_PARAMETER 为空,请插入数据。

如果 COLUMN_FIELDS_PARAMETER 不为空,请更新数据。

我使用按钮,所以当用户点击它时,他会得到以下方法:

public String putParameters(String parametersList, String exercise) {

        ContentValues cv = new ContentValues();
        cv.put(COLUMN_FIELDS_PARAMETER, parametersList);
        cv.put(COLUMN_EXERCISE, exercise);

        String whereClause =  COLUMN_EXERCISE + "= '"+ exercise+ "'";

        if(checkParameters(exercise) == false)
        {
            ourDatabase.insert(TABLE_NAME, null, cv);
            String i = "insert";
            return i;
        }   
        else
        {
            ourDatabase.update(TABLE_NAME, cv, whereClause, null);
            String u = "update";
            return u;
        }
    }

checkParameters方法代码:

public String getParameters(String exercise){

    String foo = "";

    String whereClause = COLUMN_EXERCISE + "= '" +  exercise + "'";

    String[] columns = new String[]{COLUMN_FIELDS_PARAMETER};

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null);

    int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER);


    try{
    c.moveToFirst();
    foo = c.getString(parameter);
    if (foo == null)
        return null;
    }
    catch(Exception F)
    {
        foo = "bad";
        return foo;
    }
    return "";
    }   

    public boolean checkParameters(String exercise){


        String whereClause = COLUMN_EXERCISE + "= '" +  exercise + "'";

        String[] columns = new String[]{COLUMN_FIELDS_PARAMETER};

        Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null);

        int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER);

        c.moveToFirst();
        if(c.isNull(parameter))
            return false;
        return true;    
    }

我的问题是我从未得到 c.isNull(参数)== false 。我总是得到“插入”消息。 如何检查 COLUMN_FIELDS_PARAMETER 是否为空?我的代码是对的? 感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

试试这段代码:

public boolean checkParameters(String exercise){


    String whereClause = COLUMN_EXERCISE + "= '" +  exercise + "'";

    String[] columns = new String[]{COLUMN_FIELDS_PARAMETER};

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null);

    c.moveToFirst();
    if (c.isAfterLast())
        return false; // no entry found for given exercise
    if(c.isNull(c.getColumnIndexOrThrow(COLUMN_FIELDS_PARAMETER)))   // check for null value
        return false;
    if(c.getString(c.getColumnIndexOrThrow(COLUMN_FIELDS_PARAMETER)).equals(""))  // check for empty string
        return false;
    return true;    
}

编辑:我想也许你想要的不是检查参数字段是否为空,而是否存在给定练习的条目。如果练习存在于DB中,则无论参数的值如何,都需要更新它,否则添加新条目。正确?

如果是,请使用此代码:

public boolean checkParameters(String exercise){

    String whereClause = COLUMN_EXERCISE + "= '" +  exercise + "'";

    String[] columns = new String[]{COLUMN_FIELDS_PARAMETER};

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null);

    int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER);

    if (c.getCount() == 0)
        return false;
    return true;    
}

答案 1 :(得分:0)

也许你的COLUMN_FIELDS_PARAMETER会有一个默认值。你为什么不亲自检查价值?

 int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER);
 String value = c.getString(parameter);
 if(TextUtils.isEmpty(value) {
    return false;
 }
 return true;