Android SQLite: возможно ли избежать вставки одной и той же переменной - PullRequest
0 голосов
/ 13 апреля 2020

Мне интересно, возможно ли выполнить запрос к существующей базе данных и определить, присутствует ли при вставке то же значение в базе данных.

Это метод вставки в класс extends SQLiteOpenHelper

 public void insertTimeTable_Schedule(String title, String subtitle, String color_text, String color_text_bg,
                                     String mon, String tue, String wed, String thus, String fri, String sat, String sun,
                                     String start_time, String end_time){
    sqLiteDatabase = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COLUMN_TITLE,title);
    values.put(COLUMN_SUBTITLE,subtitle);
    values.put(COLUMN_COLOR_TEXT,color_text);
    values.put(COLUMN_COLOR_TEXT_BG,color_text_bg);
    values.put(COLUMN_MON,mon);
    values.put(COLUMN_TUE,tue);
    values.put(COLUMN_WED,wed);
    values.put(COLUMN_THUS,thus);
    values.put(COLUMN_FRI,fri);
    values.put(COLUMN_SAT,sat);
    values.put(COLUMN_SUN,sun);
    values.put(COLUMN_START_TIME,start_time);
    values.put(COLUMN_END_TIME,end_time);
    sqLiteDatabase.insert(TABLE_TIMETABLE, null, values);
}

Теперь я хотел бы обнаружить и сделать сообщение об ошибке, если при вставке данных новой таблицы start_time в COLUMN_START_TIME.

Я пытался отобразить значения из базы данных, используя метод будет указано ниже, и это покажет все, что я вставил

 public String getData_database(){
    sqLiteDatabase = this.getReadableDatabase();
    String[] columns = new String[]{KEY_ID, COLUMN_TITLE,COLUMN_SUBTITLE,COLUMN_COLOR_TEXT,COLUMN_COLOR_TEXT_BG,
                                    COLUMN_MON,COLUMN_TUE, COLUMN_WED,COLUMN_THUS, COLUMN_FRI,COLUMN_SAT,COLUMN_SUN,
                                    COLUMN_START_TIME,COLUMN_END_TIME};
    @SuppressLint("Recycle")
    Cursor cursor =
            sqLiteDatabase.query(TABLE_TIMETABLE,columns,null,null,null,null,null);

    int iId = cursor.getColumnIndex(KEY_ID);
    int iTitle = cursor.getColumnIndex(COLUMN_TITLE);
    int iTextcolor = cursor.getColumnIndex(COLUMN_COLOR_TEXT);
    int iTextBgcolor = cursor.getColumnIndex(COLUMN_COLOR_TEXT_BG);
    int iSubtitle = cursor.getColumnIndex(COLUMN_SUBTITLE);
    int iStarttime = cursor.getColumnIndex(COLUMN_START_TIME);
    int iEndtime = cursor.getColumnIndex(COLUMN_END_TIME);

    StringBuilder result = new StringBuilder();

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
        result.append("Id: ").append(cursor.getString(iId)).append("\n").append("Title: ").append(cursor.getString(iTitle)).append("\n").append("SubTitle: ").append(cursor.getString(iSubtitle)).append("\n").append("Text Color: ").append(cursor.getString(iTextcolor)).append("\n").append("Text BG Color: ").append(cursor.getString(iTextBgcolor)).append("\n").append("Start Time: ").append(cursor.getString(iStarttime)).append("\n").append("End Time: ").append(cursor.getString(iEndtime)).append("\n\n");
    }
    sqLiteDatabase.close();
    return result.toString();
}

Если у вас есть какие-либо советы, я хотел бы услышать.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Этот метод:

public boolean existsStartTime(String start_time){
    sqLiteDatabase = this.getWritableDatabase();
    String sql = "SELECT 1 FROM " + TABLE_TIMETABLE + " WHERE " + COLUMN_START_TIME + " = ?"; 
    Cursor c = sqLiteDatabase.rawQuery(sql, new String[] {start_time});
    boolean result = c.moveToFirst();
    c.close();
    sqLiteDatabase.close();
    return result;
}

вернет true, если значение переменной start_time существует в таблице, или false, если она не существует. Вы можете проверить это как:

String start_time = "<value here>";
if (existsStartTime(start_time)) {
  <error message here>
} else {
    insertTimeTable_Schedule(...);
}
0 голосов
/ 13 апреля 2020

У вас может быть метод, который возвращает логическое значение после запроса таблицы. Затем в своем операторе вставки вы проверяете, является ли ответ верным, затем показываете любую ошибку, в противном случае вставьте запись.

...