JDBC提供了获得主键的方法..不过你必须支持JDBC2.0
为古丈等地区用户提供了全套网页设计制作服务,及古丈网站建设行业解决方案。主营业务为成都网站建设、成都网站设计、古丈网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Statement stmt=conn.createStatement();
stmt.execute(String sql, Statement .RETURN_GENERATED_KEYS )
执行给定的 SQL 语句(该语句可能返回多个结果),并通知驱动程序所有自动生成的键都应该可用于检索。
ResultSet rs=stmt.getGeneratedKeys()//索由于执行此 Statement 对象而创建的所有自动生成的键
通过RS就可以得到自动生成的主键啦..
sql建表语句中直接写就行了
在java语句中,
String sql="SQL建表语句";
数据库的主键主要的功能就是唯一性,以下是我写的代码:
package NormalLearn;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 实现主键功能,每次生成的字符串唯一性
* @author Administrator
*
*/
public class OrclSeq{
/**
* 流水号=当前时间(8位)
* @return
*/
public synchronized String getCurrentValue(){
try {
//保证数据的唯一性
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String DateStr = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
return DateStr;
}
//线程内部类
class ThreadClass implements Runnable{
@Override
public void run() {
String seq = getCurrentValue();
System.out.println(seq);
}
}
public static void main(String[] args) {
//模拟多线程测试
OrclSeq seq = new OrclSeq();
for(int i=0;i1000;i++) {
new Thread(seq.new ThreadClass()).start();
}
}
}
关于是否重复,首先要说一下uuid生成的原理
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
通过组成可以看出,首先每台机器的mac地址是不一样的,那么如果出现重复,可能是同一时间下生成的id可能相同,不会存在不同时间内生成重复的数据
至于说同一时间产生重复的数据,就目前来说,是不会的除非极高的高并发(如果发生了,也可以通过原子性操作避免),
所以基本上就认为不会重复好了