Java 自动分配身份证号码

Java 自动分配身份证号码,java,database,jsp,Java,Database,Jsp,我有一个声明,要在数据库中插入一名新员工 如果我希望通过将1添加到以前的员工编号中来自动生成员工编号,该怎么办?如何在JSP中实现这一点?虽然不是JSP,但可能的解决方案是在数据库中创建一个自动生成的递增列,称为标识列。重要的是,这避免了存在于检索当前最大值并使其递增的解决方案中的争用条件 MySQL示例: strSQL = "INSERT INTO emp(NO, EMP_NAME, EMP_TEL)VALUES(088000, 'JIMMY', *****)"; stmt.executeUp

我有一个声明,要在数据库中插入一名新员工


如果我希望通过将1添加到以前的员工编号中来自动生成员工编号,该怎么办?如何在JSP中实现这一点?

虽然不是JSP,但可能的解决方案是在数据库中创建一个自动生成的递增列,称为标识列。重要的是,这避免了存在于检索当前最大值并使其递增的解决方案中的争用条件

MySQL示例:

strSQL = "INSERT INTO emp(NO, EMP_NAME, EMP_TEL)VALUES(088000, 'JIMMY', *****)";
stmt.executeUpdate(strSQL);
Apache Derby示例:

create table emp (
  emp_id integer not null auto_increment,
  ...
);
MS SQL Server 2008 R2示例:

create table emp (
  emp_id integer not null generated always as identity,
  ...
);
INSERT语句不包括emp_id列。如有需要,请参阅以获取生成的id。

您可以在数据库的字段“否”上使用“自动增量”选项,或执行类似“从emp中选择MAXNO”的查询


并根据您的数据库获取最大值。。。我给你举一个mysql的例子

create table emp (
  emp_id integer not null identity,
  ...
);
现在,您可以使用

create table emp{
    NO int unsigned auto_increment,
    EMP_NAME varchar(30) not null,
    ...

}


insert into emp(EMP_NAME,...) values ("Jimmy", ...);

当然可以,您可以通过将employee no设置为唯一,并在此列属性中自动递增来实现此目的

检查创建ID为int NOT NULL AUTO_INCREMENT的表emp的数据库架构 然后更新模式strSQL=INSERT到empEMP_NAME,EMP_TEL值'ABC_NAME','321'; 虽然这是可能的,但我们不应该对JSP进行任何逻辑操作。转发Servlet中的所有输入并在那里执行。
有几种方法可以做到

有些数据库(如Oracle)具有序列等功能,允许您按顺序递增数字,并作为原子操作。 将列主键设置为“自动增量数据库”选项,并且不要在查询中指定“否”。这样,数据库将自动添加您未添加的NO列。 您可以从数据库表中获取最大值,并为新的NO添加1,或者您也可以将这些最新值保存在文件memcached中,无论您想要什么。这3的问题是,如果您不使程序在获取最新值、添加1、调用数据库插入查询之间是原子的,那么多个查询可以使用相同的NO。不过,若“否”是主键,那个就可以了,因为只会执行第一次更新/插入查询,而其他查询将由于主键唯一性冲突而失败。。。但在某些情况下会有问题。
我认为这将解决您在数据库中的疑问,并使用以下查询:

创建表:

插入表方法:1

插入表方法:2

如果您有任何疑问,请给我评论

如果您使用sqlyog来使用快捷方式

如果您希望此方法如下所示:

INSERT INTO test (id,emp_name,emp_tel)
VALUES (0,jmail,1234567);

您需要为maxno查询emp表,然后添加+1..将该值用于下一步insertions@Naren这很可能在并发环境中中断,然后在DB端创建它
CREATE TABLE `test` (
  `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `emp_name` VARCHAR(50) NOT NULL,
  `emp_tel` INT(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
INSERT INTO test
VALUES (0,jmail,1234567)OR(?,?,?);
INSERT INTO test (id,emp_name,emp_tel)
VALUES (0,jmail,1234567);
PreparedStatement ps = con.prepareStatement("INSERT INTO test(id,emp_name,emp_tel)
VALUES (0,jmail,1234567)");
ps.executeUpdate();
PreparedStatement ps = con.prepareStatement("INSERT INTO test(id,emp_name,emp_tel)
VALUES (?,?,?)");
ps.setString(1, id );
ps.setString(2, name);
ps.setString(3, tel);
ps.executeUpdate();