【问题标题】:How check if one column value from the Cursor is empty?如何检查光标中的一列值是否为空?
【发布时间】:2013-05-10 17:04:01
【问题描述】:

我是否尝试将值插入我的数据库取决于值的状态。

如果 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(parameter) == false。我总是收到“插入”消息。 如何检查 COLUMN_FIELDS_PARAMETER 是否为空?我的代码正确吗? 感谢您的帮助:)

【问题讨论】:

    标签: android android-sqlite android-cursor


    【解决方案1】:

    也许您的 COLUMN_FIELDS_PARAMETER 会有一个默认值。为什么不自己检查值呢?

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

    【讨论】:

    • 我试过了,但它不起作用......我改变了我的代码,所以用户只能“更新”而不是“插入”,这样它就更容易了。感谢您的帮助:)
    【解决方案2】:

    试试这个代码:

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

    【讨论】:

    • 感谢您的帮助。第一个代码不起作用 =\ 第二个代码不好,因为练习可以在数据库中,但 COLUMN_FIELDS_PARAMETER 列为空。
    • 第二个代码应该可以工作。如果它在数据库中并且为空,请更新它。这将工作
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 2017-06-11
    • 2011-11-05
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多