为行生成id

时间:2013-01-10 00:10:33

标签: java

我已经在按钮点击事件中调用了返回值nextId,但每当我尝试执行按钮点击事件时,它会将其初始化,然后生成下一个,请您帮我解决这个问题吗?

package util;

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

public class CalendarUtil {

    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) {
            CalendarUtil.counter = Integer.parseInt(returnMaxId().substring(8, returnMaxId().length()));
        }

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

        String suffix = "";

        if (CalendarUtil.counter <= 1000) {

            if (validateRange(0, 9, CalendarUtil.counter)) {
                suffix += "00" + counter;
            } else if (validateRange(10, 99, CalendarUtil.counter)) {
                suffix += "0" + counter;
            } else if (validateRange(99, 999, CalendarUtil.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;
    }
    public static void main(String[] args) {

    }
}

1 个答案:

答案 0 :(得分:0)

            result = (rs.getString(1) != null) ? rs.getString(1) : "0";

应该是

            result = (rs.getInt(1) != null) ? rs.getInt(1) : "0";

但是你应该使用JDBC API方法来获取最后插入的id,请查看以下代码。

pstmt = conn.prepareStatement(Query, Statement.RETURN_GENERATED_KEYS);  
pstmt.executeUpdate();  
ResultSet keys = pstmt.getGeneratedKeys();  
keys.next();  
key = keys.getInt(1);  // gets the last inserted id
keys.close();  
pstmt.close();  
conn.close();  
} catch (Exception e) { e.printStackTrace(); }  
return key;  
}