2016-02-04 2 views
0

Я пытаюсь обновить запись, всякий раз, когда я обновляю запись, новый идентификатор генерируется с обновленными значениями. Обновление должно происходить с одним и тем же идентификатором. В чем причина?Почему доза обновления создает новый идентификатор в базе данных?

Создать таблицу: функция

public void createTable(SQLiteDatabase db){ 
    String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," 
      + KEY_TITLE + " TEXT," 
      + KEY_FROM_DATE + " DATE," 
      + KEY_TO_DATE + " DATE," 
      + KEY_DAY_OF_WEEK + " TEXT," 
      + KEY_LOCATION + " TEXT," 
      + KEY_NOTIFICATION_TIME + " DATE" + ")"; 

    db.execSQL(CREATE_EVENTS_TABLE); 
} 

обновление:

public int updateEvent(EventData event) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_TITLE,event.getTitle()); 
    values.put(KEY_FROM_DATE,event.getFromDate()); 
    values.put(KEY_TO_DATE,event.getToDate()); 
    values.put(KEY_DAY_OF_WEEK,event.getDayOfWeek()); 
    values.put(KEY_LOCATION,event.getLocation()); 
    values.put(KEY_NOTIFICATION_TIME,event.getNotificationTime()); 


    // updating row 
    return db.update(TABLE, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(event.getId()) }); 
} 

Вызов функции обновления:

db = new EventTableHelper(getApplicationContext()); 
     eventData = new EventData(); 


db.updateEvent(eventData); 

Спасибо.

EDIT:

Мой конструктор в данныеСобытия это:

public EventData(String title,String fromDate,String toDate,String dayOfWeek,String location,String notificationTime){ 

    this.title = title; 
    this.fromDate = fromDate; 
    this.toDate = toDate; 
    this.dayOfWeek = dayOfWeek; 
    this.location = location; 
    this.notificationTime = notificationTime; 

} 

и я добавления и обновления значение с помощью данныеСобытия объекта:

db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location,notificationTime)); 

    db.updateEvent(eventData); 

Идентификатор становится увеличена, я не передавая значение id.

EventData класс

public class EventData { 

    public int id; 
    public String title; 
    public String fromDate; 
    public String toDate; 
    public String location; 
    public String dayOfWeek; 
    public String notificationTime; 



    public EventData(){} 
    public EventData(String title,String fromDate,String toDate, String location){ 

     this.title = title; 
     this.fromDate = fromDate; 
     this.toDate = toDate; 
     this.location = location; 

    } 
    public EventData(int id,String title,String fromDate,String toDate,String dayOfWeek,String location,String notificationTime){ 

     this.title = title; 
     this.fromDate = fromDate; 
     this.toDate = toDate; 
     this.dayOfWeek = dayOfWeek; 
     this.location = location; 
     this.notificationTime = notificationTime; 

    } 
    /* public EventData(String title,String fromDate,String toDate,String dayOfWeek,String location,String notificationTime){ 

     this.id = id; 
     this.title = title; 
     this.fromDate = fromDate; 
     this.toDate = toDate; 
     this.dayOfWeek = dayOfWeek; 
     this.location = location; 
     this.notificationTime = notificationTime; 

    }*/ 
    public void setId(int id) { 
     this.id = id; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setFromDate(String fromDate) { 
     this.fromDate = fromDate; 
    } 

    public void setToDate(String toDate) { 
     this.toDate = toDate; 
    } 


    public void setLocation(String location) { 
     this.location = location; 
    } 


    public void setDayOfWeek(String dayofWeek) { 
     this.dayOfWeek = dayofWeek; 
    } 


    public void setNotificationTime(String notificationTime) { 
     this.notificationTime = notificationTime; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getFromDate() { 
     return fromDate; 
    } 

    public String getToDate() { 
     return toDate; 
    } 

    public String getLocation() { 
     return location; 
    } 


    public String getDayOfWeek() { 
     return dayOfWeek; 
    } 

    public String getNotificationTime() { 
     return notificationTime; 
    } 
} 

Я создаю события с точки зрения ребенка, поэтому я хочу, чтобы обновить событие, на котором я щелкнет. Для этого я использовал метод setTag для передачи идентификатора представления.

Это мой день фрагмент

dayplanView = (ViewGroup) view.findViewById(R.id.hoursRelativeLayout); 

    int id = i.getIntExtra("id",0); 

    mDb = new EventTableHelper(getActivity()); 
    events = mDb.getAllEvents("Mon"); 


     int tag = 0; 
     for (EventData eventData : events) { 


       String datefrom = eventData.getFromDate(); 

       if (datefrom != null) { 
        String[] times = datefrom.substring(11, 16).split(":"); 
        minutesFrom = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]); 
       } 
       String dateTo = eventData.getToDate(); 

       String title = eventData.getTitle(); 
       String location = eventData.getLocation(); 


       if (dateTo != null) { 

        String[] times1 = dateTo.substring(11, 16).split(":"); 
        minutesTo = Integer.parseInt(times1[0]) * 60 + Integer.parseInt(times1[1]); 
       } 

       createEvent(inflater, dayplanView, minutesFrom, minutesTo, title, location, tag); 
       tag++; 

      } 

    return view; 
} 

private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title,String location,int tag) { 
    final View eventView = inflater.inflate(R.layout.event_view, dayplanView, false); 
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams(); 

    RelativeLayout container = (RelativeLayout) eventView.findViewById(R.id.container); 
    TextView tvTitle = (TextView) eventView.findViewById(R.id.textViewTitle); 


    if (tvTitle.getParent() != null) 
     ((ViewGroup) tvTitle.getParent()).removeView(tvTitle); 

    if(location.equals("")) 
    { 
     tvTitle.setText("Event : " + title); 

    } 

    else 
    { 

     tvTitle.setText("Event : " + title + " (At : " + location +")"); 

    } 

    int distance = (toMinutes - fromMinutes); 

    layoutParams.topMargin = dpToPixels(fromMinutes + 9); 
    layoutParams.height = dpToPixels(distance); 

    eventView.setLayoutParams(layoutParams); 
    dayplanView.addView(eventView); 
    container.addView(tvTitle); 

    eventView.setTag(tag); 

    eventView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      i = new Intent(getActivity(),AddEventActivity.class); 
      editMode = true; 
      i.putExtra("EditMode",editMode); 
      int tag = 0; 
      tag =(int)v.getTag(); 
      i.putExtra("tag",tag); 
      startActivityForResult(i,1); 

     } 
    }); 

} 
+1

Код, который вы показали, не может генерировать новые идентификаторы. Вы уверены, что не используете 'insertWithOnConflict()' где-нибудь? –

+0

Нет. Я не использую это. @ CL – user5881997

+0

Почему вы не делаете это 'db.update (TABLE, values, KEY_ID = id, null);'? –

ответ

2

Как мы уже говорили в комментариях. Я думаю, вы не должны быть настолько сложным, как вы в настоящее время в настоящее время,

Просто сделать так,

db.update(TABLE, values, KEY_ID = id, null); 

где идентификатор означает целое значение или значение столбца KEY_ID, что вы хотите Обновить. Как и значение id будет 5, если вы хотите обновить строку с идентификатором 5.

+0

Проверьте отредактированный вопрос. – user5881997

+0

@ user5881997 Вы пытаетесь вставить новую строку? Или пытаетесь обновить существующую строку? –

+0

пытается обновить существующую строку. Всякий раз, когда я нажимаю на обновление, создается новая запись. – user5881997

Смежные вопросы