【问题标题】:getting single row from table in sqlite android从sqlite android中的表中获取单行
【发布时间】:2014-10-14 08:01:49
【问题描述】:

我最近开始学习android,所以我不太清楚如何处理这个问题。 我想知道如何从数据库中的一个可能表中获取单行 我阅读了androidhive database tutorial 并尝试像示例代码一样编写我的代码,但是当我想编写“获取单行”部分时,我遇到了一些问题。

这是我的模型类

public class UserMealUnit {
 int mealid;
 boolean breakfast;
 boolean lunch;
 float vegetables;
 public int getMealid() {
    return mealid;
}
public void setMealid(int mealid) {
    this.mealid = mealid;
}
public boolean isBreakfast() {
    return breakfast;
}
public void setBreakfast(boolean breakfast) {
    this.breakfast = breakfast;
}
public boolean isLunch() {
    return lunch;
}
public void setLunch(boolean lunch) {
    this.lunch = lunch;
}
    public float getVegetables() {
    return vegetables;
}
public void setVegetables(float vegetables) {
    this.vegetables = vegetables;
}

这是我的数据库适配器代码getting single row 部分

UserMealUnit getusermealunit(int mealid){
        SQLiteDatabase myDataBase = null;
        myDataBase = openHelper.getWritableDatabase();
        Cursor cursor=myDataBase.query(TABLE_USERMEALUNIT, new String[] {TABLE_USERMEALUNIT_ID,
                TABLE_USERMEALUNIT_BREAKFAST,
                TABLE_USERMEALUNIT_LUNCH,
                TABLE_USERMEALUNIT_VEGETABLES,

                }, TABLE_USERMEALUNIT_ID + "=?",  new String[] { String.valueOf(mealid) },
                 null, null, null, null);
         if (cursor != null)
                cursor.moveToFirst();            
         UserMealUnit mealunit=new UserMealUnit(); 

        return mealunit;


    }

我在UserMealUnit mealunit=new UserMealUnit();part 有问题,所以我还没有填写。 如您所见,我有布尔类型、整数类型和浮点数,在 androidhive 示例中,所有列类型都是字符串,我不明白他为什么将它们完全解析为整数类型以及我在代码中与这部分有什么关系? 这是androidhive中的部分

 Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));

【问题讨论】:

  • 嗨 mimi,cursor.getString(0) 是 KEY_ID,cursor.getString(1) 是 KEY_NAME,cursor.getString(2) 是联系人表中的 KEY_PH_NO 字段

标签: java android database sqlite boolean


【解决方案1】:

SQLite 没有原生的布尔数据类型。请参阅 Datatypes doc for SQLite. 您可以存储 int 值,例如 0 用于 false1 用于 true。 像这样试试

public UserMealUnit getusermealunit(int mealid) {
    SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT  * FROM " + TABLE_USERMEALUNIT + " WHERE "
            + TABLE_USERMEALUNIT_ID + " = " + mealid;

    Log.d(LOG, selectQuery);

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

    if (c != null)
        c.moveToFirst();

    UserMealUnit mealunit = new UserMealUnit();
    mealunit.setMealid(c.getInt(c.getColumnIndex(KEY_ID)));//KEY_ID key for fetching id
    mealunit.setBreakfast((c.getInt(c.getColumnIndex(KEY_BREAKFAST))));//KEY_BREAKFAST key for fetching isBreakfast
    mealunit.setLunch((c.getInt(c.getColumnIndex(KEY_LUNCH))));//KEY_LUNCH key for fetching isLunch
    mealunit.setVegetables((c.getFloat(c.getColumnIndex(KEY_VEGETABLE))));//KEY_VEGETABLE key for fetching vegetables

    return mealunit;
}

模型类

public class UserMealUnit {

    int mealid;
    int breakfast;
    int lunch;
    float vegetables;

    public int getMealid() {
        return mealid;
    }
    public void setMealid(int mealid) {
        this.mealid = mealid;
    }
    public int getBreakfast() {
        return breakfast;
    }
    public void setBreakfast(int breakfast) {
        this.breakfast = breakfast;
    }
    public int getLunch() {
        return lunch;
    }
    public void setLunch(int lunch) {
        this.lunch = lunch;
    }
    public float getVegetables() {
        return vegetables;
    }
    public void setVegetables(float vegetables) {
        this.vegetables = vegetables;
    }
}

创建TABLE_USERMEALUNIT表的查询

private static final String CREATE_TABLE_USERMEALUNIT = "CREATE TABLE "
            + TABLE_USERMEALUNIT + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_BREAKFAST
            + " INTEGER,"+ KEY_LUNCH + " INTEGER," +  KEY_VEGETABLE + " REAL" + ")";

Activity 中检查lunchbreakfast 的值是否等于1 像这样

if(lunch == 1) {
   //lunch is int value fetched from db it means true do what ever you want to do
} else {
   //it means false do what ever you want to do
}

【讨论】:

  • 因为布尔类型它给我错误如果我添加 !=0 mealunit.setBreakfast((c.getInt(c.getColumnIndex(KEY_BREAKFAST)))!=0);?
  • SQLite 数据库中没有布尔类型。相反,我必须将 0 保存为 false,将 1 保存为 true。因此要读取您的值,所以这里 KEY_BREAKFAST 是布尔值,但我们有 getInt ,我使用 !=0 来获取 int 类型来解决这个问题。
  • @mimi :是的,为TABLE_USERMEALUNIT发布创建表查询
  • @mimi 检查编辑的答案这就是我的意思
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 2019-10-09
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2011-09-15
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多