#java #android #sqlite
#java #Android #sqlite
Вопрос:
Я пытаюсь использовать SQLite для фильтрации определенных дней из базы данных. У меня есть база данных, в которой сохраняются имя, идентификатор и день. Я хочу, чтобы getMonday() выбирал только из COL0, где строка — понедельник.
Я пробовал разные способы вызова определенного имени, но я ничего не получаю из базы данных. Два других метода работают нормально. Может кто-нибудь, пожалуйста, помочь мне определить ошибку?
private static final String TAG = "DatabaseHelper";
private static final String TABLE_NAME = "exercises";
private static final String COL0 = "day";
private static final String COL1 = "ID";
private static final String COL2 = "name";
public DatabaseHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " TABLE_NAME "("
COL1 " INTEGER PRIMARY KEY AUTOINCREMENT," COL0 " TEXT," COL2 " TEXT" ");";
/*String createTable = "CREATE TABLE " TABLE_NAME " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " COL2 " TEXT, " COL0 "TEXT)";*/
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP IF TABLE EXISTS " TABLE_NAME);
onCreate(db);
}
public boolean addData(String item, String day) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
contentValues.put(COL0, day);
Log.d(TAG, "addData: Adding " item "and " day " to " TABLE_NAME);
long result = db.insert(TABLE_NAME, null, contentValues);
//if date as inserted incorrectly it will return -1
if (result == -1) {
return false;
} else {
return true;
}
}
//Get monday from database
public Cursor getMonday(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " COL2 " FROM " TABLE_NAME
" WHERE " COL0 " = '" "Monday" "'";
Cursor data = db.rawQuery(query, null);
return data;
}
//Get all the data from database
public Cursor getData(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
//Returns only the ID that matches the name passed in
public Cursor getItemID(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " COL1 " FROM " TABLE_NAME
" WHERE " COL2 " = '" name "'";
Cursor data = db.rawQuery(query, null);
return data;
}
}
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu popupMenu = new PopupMenu(getActivity(), btnAdd);
popupMenu.getMenuInflater().inflate(R.menu.menu_week, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem weekDay) {
/*exerciseName = bundle.getString("chestExerciseNames");*/
weekDays = weekDay.getTitle().toString();
newEntry = bundle.getString("chestExerciseNames");
if(newEntry != null) {
AddData(newEntry, weekDays);
}
return true;
}
});
popupMenu.show();
}
});
return view;
}
public void AddData(String newEntry, String weekDays){
boolean insertData = mDatabaseHelper.addData(newEntry, weekDays);
if(insertData == true) {
Toast.makeText(getActivity(), newEntry " Added to " weekDays, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getActivity(), "Something went wrong", Toast.LENGTH_SHORT).show();
}
}
<item
android:id="@ id/buttonMonday"
android:title="Monday"/>
<item
android:id="@ id/buttonTuesday"
android:title="Tuesday"/>
<item
android:id="@ id/buttonWednesday"
android:title="Wednesday"/>
<item
android:id="@ id/buttonThursday"
android:title="Thursday"/>
<item
android:id="@ id/buttonFriday"
android:title="Friday"/>
<item
android:id="@ id/buttonSaturday"
android:title="Saturday"/>
<item
android:id="@ id/buttonSunday"
android:title="Sunday"/>
Комментарии:
1. Хранится ли понедельник (с заглавной первой буквой) в вашей базе данных?
2. Какие конкретные дни и в каком формате? @Flex
3. По мнению @LeoPelozo, вы можете захотеть очистить / проверить данные перед добавлением: обрезать пробелы, преобразовать в нижний регистр, подтвердить
day
допустимость. (И добавьте выходные данные Log.d изaddData
в post.)4. Все дни недели указаны с заглавной первой буквы и в строковом формате, когда я получаю их из массива перед записью в базу данных.
Ответ №1:
При добавлении дней в базу данных, пожалуйста, добавьте все дни в константы.
Например
public interface Constants {
public String MONDAY = "monday";
public String TUESDAY = "tuesday";
public String WEDNESDAY = "wednesday";
public String THURSDAY = "thursday";
public String FRIDAY = "friday";
public String SATURDAY = "satuday";
public String SUNDAY = "sunday";
}
и
При вставке данных в базу данных добавьте («Ваше имя», константы.ПОНЕДЕЛЬНИК)
Измените getMonday() на
public Cursor getMonday() {
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " COL2 " FROM " TABLE_NAME
" WHERE " COL0 " = '" Constants.MONDAY "'";
Cursor data = db.rawQuery(query, null);
return data;
}
Надеюсь, у вас это сработает
Комментарии:
1. Спасибо за ваш ответ. К сожалению, я никогда раньше не использовал константы, поэтому я не уверен, куда мне следует их добавить. Я получаю дни недели из всплывающего меню. Я обновил вопрос, добавив еще немного кода, показывающего это.