【问题标题】:Android getter and setter, database sqlite(helper class)Android getter 和 setter、数据库 sqlite(helper 类)
【发布时间】:2015-04-17 08:41:47
【问题描述】:

我在数据库上有一个包含两列的表,然后我尝试使用 web 服务,JSON 将一些数据从某个 URL 解析到数据库并保存。我尝试用这种方法做到这一点

  public void saveDataRecord(String id, String name) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(CATEGORY_COLUMN_ID, id);
        contentValues.put(CATEGORY_COLUMN_NAME, name);
        database.insert(TABLE_NAME, null, contentValues);
        }

但是我也有模型类(其中包含 setter 和 getter),当我尝试使用列表从数据库中读取数据时可以使用它(它适用于我以前的对象,其中包含数据库并且已经插入了值)。现在我想使用它,因为它具有参数并且对阅读列表很有用(看看底部的代码)。我有点困惑,getId,getName 或 setId,setName 用什么?
这个?

public void saveDataRecord(TheModelClass blablabla) {
            ContentValues contentValues = new ContentValues();
            contentValues.put(CATEGORY_COLUMN_ID, blablabla.getId());
            contentValues.put(CATEGORY_COLUMN_NAME, blablalbla.getName());
            database.insert(TABLE_NAME, null, contentValues);
}

还是这个?

 public void saveDataRecord(TheModelClass blablabla) {
                ContentValues contentValues = new ContentValues();
                contentValues.put(CATEGORY_COLUMN_ID, blablabla.setId());
                contentValues.put(CATEGORY_COLUMN_NAME, blablalbla.setName());
                database.insert(TABLE_NAME, null, contentValues);
    }

即使我在其他项目中也这样做了

public List<TheModelClass> getAllEffectiveRates() {
        List<TheModelClass> EffectiveRates = new ArrayList<TheModelClass>();
        String selectQuery = "SELECT  * FROM " + TABLE_EFFECTIVE_RATE;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (c.moveToFirst()) {
            do {
                TheModelClass example = new TheModelClass();
                example.setERId(c.getInt(c.getColumnIndex(KEY_ER_ID)));
                example.setERTenor(c.getInt(c.getColumnIndex(KEY_ER_TENOR)));
                example.setERRate(c.getDouble(c.getColumnIndex(KEY_ER_RATE)));

                // add
                EffectiveRates.add(example);
            } while (c.moveToNext());
        }
        // db.close();
        c.close();
        return EffectiveRates;
    }

我仍然对 getter 和 setter 究竟做了什么感到困惑

【问题讨论】:

  • 我应该使用get还是set????

标签: java android sqlite


【解决方案1】:

是的,您可以使用 Get Set 方法

public class GetSetClass {

// private variables
int _id;
String _data;


// Empty constructor
public GetSetClass() {
}

// constructor
public GetSetClass(int id, String data) {
    this._id = id;
    this._DataList_id = DataList_id;
}

// constructor
public GetSetClass(String data) {
    this._data = data;
}

// getting ID
public int getID() {
    return this._id;
}

// setting id
public void setID(int id) {
    this._id = id;
}

public String getdata() {
    return this._data;
}

public void setdata(String data) {
    this._data = data;
}
}

请参阅下面的代码以使用 getset 设置数据

public List<GetSetClass> getAllgetsets() {
    List<GetSetClass> getsetList = new ArrayList<GetSetClass>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CATEGORY;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            GetSetClass getset = new GetSetClass();
            getset.setID(Integer.parseInt(cursor.getString(0)));
            getset.setData(cursor.getString(1));
            getsetList.add(getset);
        } while (cursor.moveToNext());
    }

    // return getset list
    return getsetList;
}

请参阅下面的使用 getset 获取数据的代码

public int updategetset(GetSetClass getset) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_data, getset.getData()); 

    // updating row
    return db.update(TABLE_CATEGORY, values, KEY_ID + " = ?",
            new String[] { String.valueOf(getset.getID()) });
}

【讨论】:

    【解决方案2】:

    Getter 基本上返回该实例持有的数据。 Setter 设置实例持有的数据。

    在您的情况下,在插入数据时,您应该使用 getter 作为 ContentValues 实例中的值。所以应该是:

    public void saveDataRecord(TheModelClass blablabla) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(CATEGORY_COLUMN_ID, blablabla.getId());
        contentValues.put(CATEGORY_COLUMN_NAME, blablalbla.getName());
        database.insert(TABLE_NAME, null, contentValues);
    }
    

    Getter 将返回一个值。设置器(通常)不会返回值。因此,如果您使用 setter,您只会在 ContentValues 中设置实例的值,但实际上不会使用它,因为调用不会返回任何内容。

    【讨论】:

    • 它就像从输入中获取,然后放入,最后插入到表中。我说的对吗?
    【解决方案3】:

    更好地了解有关使用对象和使用 parcelables 的更多信息。 这是一个非常有用的工具,可以生成您需要的所有代码,包括表格、模型、插入类等等:

    http://www.codeproject.com/Tips/842150/Generator-for-SQLite-Use-in-Android
    

    使用 Id、Name、Code 创建一个表调用 Dic 在android中放置名称和代码的EditText以及onse保存按钮,然后单击

    dic.setName(edtName.getText().toString());
    dic.setCode(edtCode.getText().toString());
    database.Open()
    database.insert(dic);
    database.close();
    

    如果你想将数据库中的数据显示到表单中:

    Dic dic = new DIc();
    database.open();
    dic = database.findDic("id = 1");
    database.Close;
    lblName.setText(dic.getName().toString());
    lblCode.setText(dic.getCode().toString());
    

    为模型添加一个包,并将每个模型放在一个单独的文件中。 为 Db 添加一个包 添加两个文件,一个是OpenHelper.Java,一个是Database.java,方便代码管理

    【讨论】:

    • 我在使用时发现了这些。-->>>删除按钮生成插入脚本,找到按钮生成更新脚本,找到所有生成删除脚本,检查所有和更新生成相同的东西,然后插入生成找到脚本。其他的都很酷
    • @JediFighter OH...看在上帝的份上,我真的从来没有一一检查过,通常我点击全部,然后使用它。 ;) ,我稍后会更正它们,但无论如何谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多