簡體   English   中英

為什么劑量更新會在數據庫中創建新的ID?

[英]Why dose update creates new id in database?

每當我更新記錄時,我都會嘗試更新記錄,並使用更新后的值生成新的ID。 更新應該發生在相同的ID。 可能是什么原因?

創建表:

 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);

謝謝。

編輯:

我在EventData中的構造函數是這樣的:

 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;

}

我正在使用eventData對象添加和更新值:

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

     db.updateEvent(eventData);

id越來越大,我沒有將任何值傳遞給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方法來傳遞視圖ID。

這是我的一天片段

    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);

        }
    });

}

正如我們在評論中討論的那樣。 我認為您不必像現在這樣復雜。

只是這樣做就好,

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

其中id表示整數值或您要更新的KEY_ID列的值。 例如,如果您要更新ID為5的行,則id的值為5。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM