2

今日の日付と連結されたカウンターを含む SQL のレコードの ID を生成するためのコードを実行しようとしています。問題は、生成ボタンを押しようとすると、ID が現在の日付を生成することですが、次の日または日付変更時にカウンターを 1 に再初期化する必要があります。

import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyCalendarUtil {

    private static String buffer = "";
    private static int counter = 1;

    public String nextID() {
        final String datePrefix = new SimpleDateFormat("yyyyMMdd").format(new Date());

        if (Long.parseLong(returnMaxId()) > 0) {
            MyCalendarUtil.counter = Integer.parseInt(returnMaxId().substring(8, returnMaxId().length()));
        }

        if (buffer.equals(datePrefix)) {
            MyCalendarUtil.counter++;
        } else {
            MyCalendarUtil.buffer = datePrefix;
            MyCalendarUtil.counter = 1;
        }

        String suffix = "";

        if (MyCalendarUtil.counter <= 1000) {

            if (validateRange(0, 9, MyCalendarUtil.counter)) {
                suffix += "00" + counter;
            } else if (validateRange(10, 99, MyCalendarUtil.counter)) {
                suffix += "0" + counter;
            } else if (validateRange(99, 999, MyCalendarUtil.counter)) {
                suffix += counter;
            }
        }

        return (datePrefix + suffix);
    }

    public boolean validateRange(int min, int max, int field) {
        return field >= min && field <= max;
    }

    public String returnMaxId() {
        String result = "";
        try {
            DBUtil util = new DBUtil();
            Connection connection = util.getConnection();
            ResultSet rs = connection.createStatement().executeQuery("SELECT MAX(id) AS 'lastId' FROM crap ");
            if (rs.next()) {
                result = (rs.getString(1) != null) ? rs.getString(1) : "0";
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error : " + e.getMessage());
        }
        return result;
    }
}
4

1 に答える 1

1

私の理解によると、あなたはカレンダーの日変化特性に耳を傾ける必要があります。以下のコードはあなたを助けるかもしれません...

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateChangeEx {

    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

    private static int counter = 1;
    public static void main(String[] a){

        Calendar cal = MyCal.getInstance();

        System.out.println(cal.getTime());
        System.out.println("before updating counter--->");
        for(int i=0; i<10; i++){
            System.out.println(""+(counter++)+cal.getTime());
        }

        cal.add(Calendar.DATE, 1);
        System.out.println("After updating counter--->");
        for(int i=0; i<10; i++){
            System.out.println(""+(counter++)+cal.getTime());
        }
        System.out.println(cal.getTime());
    }

    private class ChangeListner implements PropertyChangeListener{

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            counter = 0;

        }

    }

    private class MyCal extends GregorianCalendar{

        public void add(int field, int amount){
            Date oldVal = this.getTime(); 
            super.add(field, amount);

            changeSupport.firePropertyChange("calender", oldVal, this.getTime());
        }
    }

    public void addPropertyChangeListner(PropertyChangeListener listner){
        changeSupport.addPropertyChangeListener(listner);
    }

    public void removePropertyChangeListner(PropertyChangeListener listner){
        changeSupport.removePropertyChangeListener(listner);
    }
}
于 2013-01-10T11:54:56.173 に答える