如何在几个地方保存数据

时间:2017-12-21 21:32:18

标签: android sql database sqlite sqliteopenhelper

如何将数据库中的数据放在多个位置以保存不同的数据。我不知道这是否是一个完全可以理解的问题,这就是为什么我会试着让它们更接近。

我想保存一周中每天的菜肴名称:

即。我有一个列出一周中几天的名字: - 星期一, - 星期二, - 星期三, - 星期四, - 星期五, - 周六, - 星期天

现在我想在选择特定日期时在那里保存各种菜肴。例如周一,切碎+土豆,星期二 - 意大利面等。我知道我将不得不使用不同的表格将信息放在那里,但如果我想每天写一些别的东西,我不知道怎么做。我是否必须为一周中的每一天创建单独的活动,并为特定日期创建单独的表?

我没有输入任何代码,我没有问题,只是我无法了解的问题。

1 个答案:

答案 0 :(得分:0)

  

我知道我必须使用不同的表来放置信息   有

不一定: -

  • 一周中的每一天,您都可以在菜肴表中添加一列。

  • 您可以拥有一个可用于一周中所有日期的列。

    • e.g。如果星期一被赋予价值1,星期二2,星期三4,星期四8,16,32,64。(即2到星期几(1-7))。

    • 然后,如果菜是星期一和星期四,那么你可以存储一个单独的值,包括逻辑上对相应的第1天(星期一)进行逻辑或与8(星期四)进行逻辑或为9;加上星期五(16),储值将为25.

假设后者,您可以提取(其中daysused是指示菜肴应该出现在菜单上的日期的列): -

周一菜单使用: -

SELECT * from dishes WHERE (daysused & 1) > 0

星期五菜单使用: -

SELECT * from dishes WHERE (daysused & 16) > 0

周末菜单使用: -

 SELECT * from dishes WHERE (daysused & (32 | 64)) > 0
  

我是否必须为一周中的每一天创建单独的活动   在那里为特定的一天创建单独的表?

否。您可以进行一般活动,也许可以使用按钮来选择星期几或微调器或广播组。

单击/选择将计算一天或多天,然后用于确定要查看的天数,该值将按照上述方式输入选择标准。然后可以将结果Cursor用作ListView的源以显示菜单。

示例: -

数据库助手

public class MyMenuDBHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mymenu";
    public static final int DBVERSION = 1;
    public static final String DISHES_TABLE = "dishes";
    public static final String DISHES_ID_COL = BaseColumns._ID;
    public static final String DISHES_NAME_COL = "dishes_name";
    public static final String DISHES_DAYSONMENU_COL = "dishes_daysonmenu";

    MyMenuDBHelper(Context context) {
        super(context,DBNAME,null,DBVERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String crtSQL = "CREATE TABLE IF NOT EXISTS " +
                DISHES_TABLE + "(" +
                DISHES_ID_COL + " INTEGER PRIMARY KEY, " +
                DISHES_NAME_COL + " TEXT, " +
                DISHES_DAYSONMENU_COL + " INTEGER " +
                ")";
        db.execSQL(crtSQL);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public long addDish(String name,
                   boolean usemonday,
                   boolean usetuesday,
                   boolean usewednesday,
                   boolean usethursday,
                   boolean usefriday,boolean usesaturday, boolean usesunday) {

        int daysused = MainActivity.NODAYS_FLAG;
        if (usemonday) daysused = daysused | MainActivity.MONDAY_FLAG;
        if (usetuesday) daysused = daysused | MainActivity.TUESDAY_FLAG;
        if (usewednesday) daysused = daysused | MainActivity.WEDNESDAY_FLAG;
        if (usethursday) daysused = daysused | MainActivity.THURSDAY_FLAG;
        if (usefriday) daysused = daysused | MainActivity.FRIDAY_FLAG;
        if (usesaturday) daysused = daysused | MainActivity.SATURDAY_FLAG;
        if (usesunday) daysused = daysused | MainActivity.SUNDAY_FLAG;

        ContentValues cv = new ContentValues();
        cv.put(DISHES_NAME_COL,name);
        cv.put(DISHES_DAYSONMENU_COL,daysused);
        return this.getWritableDatabase().insert(DISHES_TABLE,null,cv);
    }

    public Cursor getMenu(int daystoinclude) {
        // SQL SELECT * FROM dishes WHERE (dishes_daysonmenu & the_daystoshow_as_passed) > 0
        Cursor csr = this.getWritableDatabase().query(DISHES_TABLE,null,
                "(" + DISHES_DAYSONMENU_COL + " &  ?) > 0",
                new String[]{Integer.toString(daystoinclude)},
                null,null,null
                );
        int count = csr.getCount(); //<<< Just for debugging breakpoint
        return csr;
    }
}

“单一活动” - MainActivity

public class MainActivity extends AppCompatActivity {

    public static final String TEST = "test";
    public static final int MONDAY_FLAG = 1 << 0;
    public static final int TUESDAY_FLAG = 1 << 1;
    public static final int WEDNESDAY_FLAG = 1 << 2;
    public static final int THURSDAY_FLAG = 1 << 3;
    public static final int FRIDAY_FLAG = 1 << 4;
    public static final int SATURDAY_FLAG = 1 << 5;
    public static final int SUNDAY_FLAG = 1 << 6;
    public static final int NODAYS_FLAG = 0;

    Button[] daybuttonids = new Button[7];
    ListView mMenuList;
    MyMenuDBHelper mDBHelper;
    Cursor mCsr;
    SimpleCursorAdapter mSCA;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        daybuttonids[0] = (Button) this.findViewById(R.id.mon);
        daybuttonids[1] = (Button) this.findViewById(R.id.tue);
        daybuttonids[2] = (Button) this.findViewById(R.id.wed);
        daybuttonids[3] = (Button) this.findViewById(R.id.thu);
        daybuttonids[4] = (Button) this.findViewById(R.id.fri);
        daybuttonids[5] = (Button) this.findViewById(R.id.sat);
        daybuttonids[6] = (Button) this.findViewById(R.id.sun);
        mMenuList = this.findViewById(R.id.menulist);

        mDBHelper = new MyMenuDBHelper(this);
        addSomeDishes();

        mCsr = mDBHelper.getMenu(NODAYS_FLAG);
        mSCA = new SimpleCursorAdapter(
                this,   // Context
                android.R.layout.simple_list_item_1, // layout
                mCsr, // Cursor
                new String[]{MyMenuDBHelper.DISHES_NAME_COL}, // column(s)
                new int[]{android.R.id.text1}, // View
                0   // flags
        );
        mMenuList.setAdapter(mSCA);
        setButtonListeners();
    }

    private void setButtonListeners() {
        for (int i=0; i < daybuttonids.length; i++) {
            daybuttonids[i].setTag(new Integer(i));
            daybuttonids[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int daytouse = 1 << Integer.valueOf(v.getTag().toString());
                    Log.d("DAYTOUSE","Day to use is " + Integer.toString(daytouse));
                    refreshList(daytouse);
                }
            });
        }
    }

    private void refreshList(int daystoshowinmenu) {
        mCsr = mDBHelper.getMenu(daystoshowinmenu);
        mSCA.swapCursor(mCsr);
    }

    private void addSomeDishes() {
        mDBHelper.getWritableDatabase().delete(MyMenuDBHelper.DISHES_TABLE,null,null);
        mDBHelper.addDish("Chip and Fishes",true,false,false,false,true,false,true);
        mDBHelper.addDish("Egg under Toast", false,true, false, false,false,true,true);
        mDBHelper.addDish("Mashed Bangers", true, false,true,false,true,false,true);
    }
}

应用程序的外观: -

  • 最初(没有NODAYS用于游标)

enter image description here

  • 周一点击按钮

enter image description here

  • 周二按钮点击: -

enter image description here

  • ....周日按钮点击: -

enter image description here

当然你可以有多个表,

也许你有一张餐桌和另一张日常菜单表,后者有一个日期和菜肴的指示(即菜肴的参考/链接/关联)。如果您想保留每天供应的菜肴,那么这将是更可取的,因为每个菜肴/日的组合可以被唯一识别,并且可以包括用于使用次数的列。