Java 应用自动产生 database ID

我想利用应用来自动产生 database 的 ID 这个问题是大家经常会遇到的, 尤其当 application 会集群的时候,ID就显得更为复杂,在此给出一个我写的 id 生成类, 大家说说吧, 同时我也喜欢能够得到你关于这块更好的意见。。

public class  IDUtils {

 private static AtomicLong feedID;
 private static AtomicLong itemID;
 private static AtomicLong tagID;
 private static AtomicLong commentID;
 private static AtomicLong categoryID;
 
 private static final String LOAD_FEED_ID =
  "SELECT MAX(id) as maxID FROM rssmaFeed ";
 private static final String LOAD_ITEM_ID =
  "SELECT MAX(id) as maxID FROM rssmaItem";
 private static final String LOAD_TAG_ID =
  "SELECT MAX(id) as maxID FROM rssmaTag";
 private static final String LOAD_COMMENT_ID =
  "SELECT MAX(id) as maxID FROM rssmaComment";
 private static final String LOAD_CATEGORY_ID =
  "SELECT MAX(id) as maxID FROM rssmaCategory";
 
 static {
  feedID = new AtomicLong(getTableMaxID(LOAD_FEED_ID));
  itemID = new AtomicLong(getTableMaxID(LOAD_ITEM_ID));
  tagID = new AtomicLong(getTableMaxID(LOAD_TAG_ID));
  commentID = new AtomicLong(getTableMaxID(LOAD_COMMENT_ID)); 
  categoryID = new AtomicLong(getTableMaxID(LOAD_CATEGORY_ID));
 }
 
 private static long getTableMaxID(String sql) {
  Connection con = null;
        PreparedStatement pstmt = null;
        try {
            con = DbConnectionManager.getConnection();
            pstmt = con.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            if(rs.next()){
             return rs.getLong("maxID");
            }
        } catch (SQLException e) {
   LogUtils.error(e);
  } finally {
            try { if (pstmt != null) { pstmt.close(); } }
            catch (Exception e) { LogUtils.error(e); }
            try { if (con != null) { con.close(); } }
            catch (Exception e) { LogUtils.error(e); }
        }
        return 0;
 }

 public static long getFeedID(){
  return feedID.incrementAndGet();
 }
 
 public static long getItemID(){
  return itemID.incrementAndGet(); 
 }
 
 public static long getTagID(){
  return tagID.incrementAndGet(); 
 }
 
 public static long getCommentID(){
  return commentID.incrementAndGet();
 }
 
 public static long getCategoryID(){
  return categoryID.incrementAndGet();
 }
 
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值