如何在几个地方保存数据

How to save data in a few places

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

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

即我有一个包含星期几名称的列表: - 周一, - 周二, - 周三, - 周四, - 星期五, - 周六, - 周日

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

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

I know that I will have to use different tables to put information there

不一定:-

  • 您可以在 菜肴 table 中为一周中的每一天设置一列。

  • 您可以有一个列可用于一周中的所有天数。

    • 例如如果星期一被分配值 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

Do I have to create a separate Activity for each day of the week and create separate tables for a specific day there?

没有。您可以有一个通用的 activity,也许带有一个指向 select 星期几的按钮,或者一个微调器或一个单选组。

Clicking/selecting 将计算天数,然后用于确定要查看的天数,该值将按照上述行输入 selection 标准。生成的 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;
    }
}

"Single Activity"-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 作为光标)

  • 单击了星期一按钮

  • 星期二 单击按钮:-

  • ...星期日按钮被点击:-

当然你可以有多个 tables,

也许你会有一个 table 用于菜肴,另一个 table 用于日常菜单,后者具有当天和菜肴的指示器(即 reference/link/association到盘子里)。如果您想记录每天供应的菜肴,这将是更好的选择,因为 dish/day 的每个组合都可以被唯一标识,并且可以包含一列用于计算使用次数。