如何在几个地方保存数据

问题描述 投票:-1回答:1

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

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

即我有一个列表,上面有星期几的名字: - 周一, - 周二, - 周三, - 周四, - 周五, - 周六, - 周日

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

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

android sql database sqlite sqliteopenhelper
1个回答
0
投票

我知道我必须使用不同的表来将信息放在那里

不必要:-

  • 一周中的每一天,您都可以在餐桌上放置一列。
  • 您可以拥有一个可用于一周中所有日期的列。 例如如果星期一被分配值1,星期二2,星期三4,星期四8,16,32,64。(即2到星期几的力量(1-7))。 然后,如果盘子是星期一和星期四,那么你可以存储一个单独的值,包括逻辑OR'相应的第1天(星期一)逻辑OR与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的源以显示菜单。

Example :-

数据库助手

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

What the App looks like :-

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

enter image description here

  • 单击星期一按钮

enter image description here

  • 星期二点击按钮: -

enter image description here

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

enter image description here

Of course you could have multiple tables,

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

© www.soinside.com 2019 - 2024. All rights reserved.