2013-01-10 25 views
2

我试图执行生成包含今天的日期和计数器concordinated的SQL中的记录的编号的代码。问题是当我尝试点击生成按钮的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; 
    } 
} 

回答

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); 
    } 
} 
+0

不工作plz help ............. –

+0

请问你有什么不适合你吗? – pratikch

+0

我想在netbeans中运行这个程序,当日期改变时,计数器应该重新初始化,如果我重新启动我的Windows应用程序,计数器应该恢复到它的位置或之前的ID,我已经成功提交到数据库 –

相关问题