如何将数据库中的数据放在多个位置以保存不同的数据。我不知道这是否是一个完全可以理解的问题,这就是为什么我会试着让它们更接近。
我想保存一周中每天的菜肴名称:
即。我有一个列出一周中几天的名字: - 星期一, - 星期二, - 星期三, - 星期四, - 星期五, - 周六, - 星期天
现在我想在选择特定日期时在那里保存各种菜肴。例如周一,切碎+土豆,星期二 - 意大利面等。我知道我将不得不使用不同的表格将信息放在那里,但如果我想每天写一些别的东西,我不知道怎么做。我是否必须为一周中的每一天创建单独的活动,并为特定日期创建单独的表?
我没有输入任何代码,我没有问题,只是我无法了解的问题。
答案 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;
}
}
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);
}
}
也许你有一张餐桌和另一张日常菜单表,后者有一个日期和菜肴的指示(即菜肴的参考/链接/关联)。如果您想保留每天供应的菜肴,那么这将是更可取的,因为每个菜肴/日的组合可以被唯一识别,并且可以包括用于使用次数的列。