我已经在按钮点击事件中调用了返回值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) {
}
}
答案 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;
}