Как мне выбрать все определенные дни из столбца SQLite?

#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. Спасибо за ваш ответ. К сожалению, я никогда раньше не использовал константы, поэтому я не уверен, куда мне следует их добавить. Я получаю дни недели из всплывающего меню. Я обновил вопрос, добавив еще немного кода, показывающего это.