jfinal里Db执行sql语句,有些返回的是byte[]

public static String getPrimaryKey(String tableName, String primaryKey, int length) {
		String sql = "SELECT CONCAT(LPAD(MAX("+primaryKey+") + 1 , "+length+", '0'), '') id from "+tableName;
		String id = new String((byte[])(Db.queryFirst(sql)));
		return id.toString();
//		return "00002";
	}

写一个极其简单的主键生成方法,居然为这个折腾好久,看来还是自己太菜了

评论区

JFinal

2017-10-16 22:22

生成主键建议用 java 代码去生成,制定一个不可能重复的规则就好,例如生成个订单号用:
年月日 + 小时 + 分 + 秒 + 业务类型 + hash(userId)

由于 userId 是不可能重复的,hash 以后与前面的一系列数值拼接起来几乎不可能重复,再加上这个值设置为表的主键或者联合主键,即便出现重复也无法插入数据库

JFinal9527

2017-10-17 17:05

@JFinal 恩,其实项目不大感觉还是自增简单,您的意思是尽量不要用数据库的函数吗?是不是为了可扩张性?

JFinal

2017-10-17 17:13

@JFinal9527 数据库的自增主键用得比较多。如果你需要自行生成主键,通常是数据库生成的主键没法满足你的需求,既然没法满足,那么自己完全把控主键的生成更符合需求

热门分享

扫码入社